14장. 웹 서버


웹 서버는 웹을 통해 클라이언트에 콘텐츠를 제공하는 네트워크 서비스입니다. 이는 일반적으로 웹 페이지를 의미하지만 다른 모든 문서도 될 수 있습니다. 웹 서버는 하이퍼텍스트 전송 프로토콜 (HTTP)을 사용하므로 HTTP 서버라고도 합니다.

Red Hat Enterprise Linux 7에서 제공되는 웹 서버는 다음과 같습니다.

  • Apache HTTP Server
  • nginx
중요

nginx 웹 서버는 Red Hat Enterprise Linux 7용 소프트웨어 컬렉션으로만 사용할 수 있습니다. nginx, Software Collections 사용 및 기타에 대한 자세한 내용은 Red Hat Software Collections 릴리스 정보를 참조하십시오.

14.1. Apache HTTP Server

이 섹션에서는 Apache Software Foundation 에서 개발한 오픈 소스 웹 서버인 Apache HTTP Server 2.4, httpd 에 중점을 둡니다.

Red Hat Enterprise Linux 이전 릴리스에서 업그레이드하는 경우 httpd 서비스 구성을 적절하게 업데이트해야 합니다. 이 섹션에서는 새로 추가된 기능 중 일부를 검토하고 Apache HTTP Server 2.4와 버전 2.2 간의 중요한 변경 사항을 간략하게 설명하고, 이전 구성 파일의 업데이트를 안내합니다.

14.1.1. 주요 변경 사항

Red Hat Enterprise Linux 7의 Apache HTTP Server는 Red Hat Enterprise Linux 6에 비해 다음과 같이 변경되었습니다.

httpd 서비스 제어

SysV init 스크립트에서 마이그레이션하면 서버 관리자가 apachectlsystemctl 명령을 사용하여 service 명령 대신 서비스를 제어하도록 전환해야 합니다. 다음 예는 httpd 서비스에 따라 다릅니다.

명령:

service httpd graceful

로 교체됨

apachectl graceful

httpdsystemd 장치 파일은 init 스크립트의 동작이 다음과 같이 다릅니다.

  • 서비스가 다시 로드되면 정상 재시작이 기본적으로 사용됩니다.
  • 정상 중지는 서비스가 중지될 때 기본적으로 사용됩니다.

    명령:

    service httpd configtest

    로 교체됨

    apachectl configtest
개인 /tmp
시스템 보안을 강화하기 위해 systemd 장치 파일은 /tmp 디렉토리를 사용하여 httpd 데몬을 실행하여 시스템 /tmp 디렉토리로 구분합니다.
구성 레이아웃

이제 모듈을 로드하는 구성 파일이 /etc/httpd/conf.modules.d/ 디렉터리에 배치됩니다. httpd 에 로드 가능한 추가 모듈을 제공하는 패키지는 이 디렉터리에 파일을 배치합니다. /etc/httpd/conf/httpd.conf 파일의 기본 섹션 앞에 Include 지시문을 사용하여 /etc/httpd/conf.modules.d/ 디렉터리에 파일을 포함합니다. 즉, conf.modules.d/ 내의 모든 구성 파일은 httpd.conf 의 주요 본문 전에 처리됩니다. /etc/httpd/conf.d/ 디렉터리에 있는 파일에 대한 IncludeOptional 지시문은 httpd.conf 파일의 끝에 배치됩니다. 즉, /etc/httpd/conf.d/ 내의 파일은 이제 httpd.conf 의 주요 본문 후에 처리됩니다.

일부 추가 구성 파일은 httpd 패키지 자체에서 제공합니다.

  • /etc/httpd/conf.d/autoindex.conf - mod_autoindex 디렉토리 인덱싱을 구성합니다.
  • /etc/httpd/conf.d/userdir.conf - 사용자 디렉터리에 대한 액세스를 구성합니다(예: http://example.com/~username/ ). 이러한 액세스는 보안상의 이유로 기본적으로 비활성화되어 있습니다.
  • /etc/httpd/conf.d/welcome.conf - 이전 릴리스에서는 콘텐츠가 없는 경우 http://localhost/ 에 대한 시작 페이지가 표시됩니다.
기본 설정
이제 최소한의 httpd.conf 파일이 기본적으로 제공됩니다. Timeout 또는 KeepAlive 와 같은 일반적인 설정 설정은 더 이상 기본 구성에서 명시적으로 구성되지 않습니다. 하드 코딩 설정은 기본적으로 사용됩니다. 모든 구성 지시문에 대해 하드 코드된 기본 설정은 설명서에 지정됩니다. 자세한 내용은 “설치 가능한 문서”를 참조하십시오.
호환되지 않는 구문 변경
기존 구성을 httpd 2.2 에서 httpd 2.4 로 마이그레이션하는 경우 httpd 구성 구문에 대한 이전 버전과 호환되는 여러 변경 사항이 변경되었습니다. http://httpd.apache.org/docs/2.4/upgrading.html업그레이드에 대한 자세한 내용은 다음 Apache 문서를 참조하십시오.
처리 모델

이전 Red Hat Enterprise Linux 릴리스에서는 다양한 다중 처리 모델 (MPM)을 다른 httpd 바이너리로 사용할 수 있습니다. 분기된 모델인 "prefork", /usr/sbin/httpd.worker 로서 스레드 기반 모델 "worker"를 /usr/sbin/httpd.worker 로 사용할 수 있습니다.

Red Hat Enterprise Linux 7에서는 단일 httpd 바이너리만 사용되며 3개의 MPM은 로드 가능한 모듈인 worker, prefork(기본값) 및 이벤트로 사용할 수 있습니다. 세 MPM 모듈 중 하나만 로드되도록 주석 문자 # 을 추가하고 제거하여 구성 파일 /etc/httpd/conf.modules.d/00-mpm.conf 를 필요에 따라 편집합니다.

패키지 변경 사항

이제 LDAP 인증 및 권한 부여 모듈이 별도의 하위 패키지인 mod_ldap 로 제공됩니다. 새로운 모듈 mod_session 및 관련 도우미 모듈은 새로운 하위 패키지인 mod_session 에 제공됩니다. 새로운 모듈 mod_proxy_htmlmod_xml2enc 는 새로운 하위 패키지인 mod_proxy_html 에 제공됩니다. 이러한 패키지는 모두 선택적 채널에 있습니다.

참고

선택적 및 추가 채널에 가입하기 전에 지원 범위 세부 정보를 참조하십시오. 이러한 채널에서 패키지를 설치하려면 How to access Optional and Supplementary channel, and -devel packages using Red Hat Subscription Manager (RHSM)를 사용하여 Red Hat Customer Portal에 설명된 단계를 따르십시오.

패키지 파일 시스템 레이아웃

/var/cache/mod_proxy/ 디렉터리는 더 이상 제공되지 않습니다. 대신 /var/cache/httpd/ 디렉터리는 프록시ssl 하위 디렉터리와 함께 패키지됩니다.

httpd 와 함께 제공되는 패키지된 콘텐츠가 /var/www/ 에서 /usr/share/httpd/ 로 이동되었습니다.

  • /usr/share/httpd/icons/ - 이전에 /var/share/httpd/icons/ 에 포함된 디렉토리 인덱스와 함께 사용되는 아이콘 세트가 포함된 디렉터리입니다. 기본 구성의 http://localhost/icons/ 에서 사용할 수 있습니다. 아이콘 위치 및 가용성은 /etc/httpd/conf.d/autoindex.conf 파일에서 구성할 수 있습니다.
  • /usr/share/httpd/manual/ - /var/www/manual//usr/share/httpd/manual/ 로 이동했습니다. httpd-manual 패키지에 포함된 이 디렉터리에는 httpd 에 대한 설명서의 HTML 버전이 포함되어 있습니다. 패키지가 설치된 경우 http://localhost/manual/ 에서 사용할 수 있으며, /etc/httpd/conf.d/manual.conf 파일에서 설명서의 위치 및 가용성을 구성할 수 있습니다.
  • /usr/share/httpd/error/ - /var/www/error//usr/share/httpd/error/ 로 이동했습니다. 사용자 정의 다중 언어 HTTP 오류 페이지. 기본적으로 구성 파일은 /usr/share/doc/httpd-VERSION/httpd-multilang-errordoc.conf 에 제공됩니다.
인증, 권한 부여 및 액세스 제어
인증, 권한 부여 및 액세스 제어 제어에 사용되는 구성 지시문이 크게 변경되었습니다. Order,DenyAllow 지시문을 사용하는 기존 구성 파일을 새 Require 구문을 사용하도록 조정해야 합니다. 자세한 내용은 다음 Apache 문서를 참조하십시오. http://httpd.apache.org/docs/2.4/howto/auth.html
suexec
시스템 보안을 개선하기 위해 suexec 바이너리는 더 이상 루트 사용자가 사용하는 것처럼 설치되지 않습니다. 대신 보다 제한적인 권한 세트를 허용하는 파일 시스템 기능 비트가 설정됩니다. 이러한 변경과 함께 suexec 바이너리는 더 이상 /var/log/httpd/suexec.log logfile을 사용하지 않습니다. 대신 로그 메시지가 syslog 로 전송됩니다. 기본적으로 이러한 메시지는 /var/log/secure 로그 파일에 표시됩니다.
모듈 인터페이스

httpd2.2 에 대해 빌드된 타사 바이너리 모듈은 httpd 모듈 인터페이스 변경으로 인해 httpd 2.4 와 호환되지 않습니다. 이러한 모듈은 httpd 2.4 모듈 인터페이스에 필요한 대로 조정한 다음 다시 빌드해야 합니다. 버전 2.4 의 API 변경 사항의 자세한 목록은 http://httpd.apache.org/docs/2.4/developer/new_api_2_4.html 에서 확인할 수 있습니다.

소스에서 모듈을 빌드하는 데 사용되는 apxs 바이너리가 /usr/sbin/apxs 에서 /usr/bin/apxs 로 이동했습니다.

제거된 모듈

Red Hat Enterprise Linux 7에서 제거된 httpd 모듈 목록:

mod_auth_mysql, mod_auth_pgsql
httpd 2.4 에서는 mod_authn_dbd 모듈에서 내부적으로 SQL 데이터베이스 인증 지원을 제공합니다.
mod_perl
mod_perl 은 업스트림에서 httpd 2.4 에서 공식적으로 지원되지 않습니다.
mod_authz_ldap
httpd 2.4 에서는 mod_authnz_ldap 를 사용하여 하위 패키지 mod_ldap 에서 LDAP 지원을 제공합니다.

14.1.2. 구성 업데이트

Apache HTTP Server 버전 2.2에서 구성 파일을 업데이트하려면 다음 단계를 따르십시오.

  1. 모든 모듈 이름이 올바른지 확인합니다. 변경되었을 수 있습니다. 이름이 변경된 각 모듈에 대해 LoadModule 지시문을 조정합니다.
  2. 로드를 시도하기 전에 모든 타사 모듈을 다시 컴파일합니다. 이는 일반적으로 인증 및 권한 부여 모듈을 의미합니다.
  3. mod_userdir 모듈을 사용하는 경우 UserDir 지시문에서 디렉터리 이름(일반적으로 public_html)을 나타내는지 확인합니다.
  4. Apache HTTP 보안 서버를 사용하는 경우 SSL(Secure Sockets Layer) 프로토콜 활성화에 대한 중요한 정보는 14.1.8절. “mod_ssl 모듈 활성화” 를 참조하십시오.

다음 명령을 사용하여 구성에 가능한 오류가 있는지 확인할 수 있습니다.

~]# apachectl configtest
Syntax OK

Apache HTTP Server 구성을 버전 2.2에서 2.4로 업그레이드하는 방법에 대한 자세한 내용은 http://httpd.apache.org/docs/2.4/upgrading.html 을 참조하십시오.

14.1.3. httpd 서비스 실행

이 섹션에서는 Apache HTTP 서버의 현재 상태를 시작, 중지, 다시 시작 및 확인하는 방법에 대해 설명합니다. httpd 서비스를 사용하려면 httpd 가 설치되어 있는지 확인합니다. 다음 명령을 사용하여 수행할 수 있습니다.

~]# yum install httpd

대상 개념과 Red Hat Enterprise Linux에서 시스템 서비스를 관리하는 방법에 대한 자세한 내용은 10장. systemd를 사용하여 서비스 관리 을 참조하십시오.

14.1.3.1. 서비스 시작

httpd 서비스를 실행하려면 쉘 프롬프트에 root 로 다음을 입력합니다.

~]# systemctl start httpd.service

부팅 시 서비스가 자동으로 시작되도록 하려면 다음 명령을 사용하십시오.

~]# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
참고

Apache HTTP 서버를 보안 서버로 실행하는 경우 암호화된 개인 SSL 키를 사용하는 경우 시스템이 부팅된 후 암호가 필요할 수 있습니다.

14.1.3.2. 서비스 중지

실행 중인 httpd 서비스를 중지하려면 쉘 프롬프트에 root 로 다음을 입력합니다.

~]# systemctl stop httpd.service

부팅 시 서비스가 자동으로 시작되지 않도록 하려면 다음을 입력합니다.

~]# systemctl disable httpd.service
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.

14.1.3.3. 서비스를 다시 시작

실행 중인 httpd 서비스를 다시 시작하는 방법은 다음 세 가지가 있습니다.

  1. 서비스를 완전히 다시 시작하려면 root 로 다음 명령을 입력하십시오.

    ~]# systemctl restart httpd.service

    그러면 실행 중인 httpd 서비스가 중지되고 즉시 다시 시작됩니다. PHP와 같이 동적으로 로드된 모듈을 설치하거나 제거한 후 이 명령을 사용하십시오.

  2. 구성을 root 로 다시 로드하려면 다음을 입력합니다.

    ~]# systemctl reload httpd.service

    이로 인해 실행 중인 httpd 서비스가 구성 파일을 다시 로드합니다. 현재 처리 중인 요청이 중단되므로 클라이언트 브라우저가 오류 메시지를 표시하거나 부분 페이지를 렌더링할 수 있습니다.

  3. 활성 요청에 영향을 주지 않고 구성을 다시 로드하려면 root 로 다음 명령을 입력합니다.

    ~]# apachectl graceful

    이로 인해 실행 중인 httpd 서비스가 구성 파일을 다시 로드합니다. 현재 처리 중인 모든 요청은 이전 구성을 계속 사용합니다.

Red Hat Enterprise Linux 7에서 시스템 서비스를 관리하는 방법에 대한 자세한 내용은 10장. systemd를 사용하여 서비스 관리 를 참조하십시오.

14.1.3.4. 서비스 상태 확인

httpd 서비스가 실행 중인지 확인하려면 쉘 프롬프트에서 다음을 입력합니다.

~]# systemctl is-active httpd.service
active

14.1.4. 구성 파일 편집

httpd 서비스가 시작되면 기본적으로 표 14.1. “httpd 서비스 구성 파일”에 나열된 위치에서 구성을 읽습니다.

표 14.1. httpd 서비스 구성 파일
경로설명

/etc/httpd/conf/httpd.conf

기본 구성 파일입니다.

/etc/httpd/conf.d/

기본 구성 파일에 포함된 구성 파일의 보조 디렉토리입니다.

기본 구성은 대부분의 상황에 적합해야 하지만 중요한 구성 옵션 중 일부에 익숙해지는 것이 좋습니다. 변경 사항을 적용하려면 먼저 웹 서버를 다시 시작해야 합니다. httpd 서비스를 다시 시작하는 방법에 대한 자세한 내용은 14.1.3.3절. “서비스를 다시 시작”에서 참조하십시오.

구성에 가능한 오류가 있는지 확인하려면 쉘 프롬프트에서 다음을 입력합니다.

~]# apachectl configtest
Syntax OK

실수로 쉽게 복구하려면 편집하기 전에 원본 파일의 복사본을 만드는 것이 좋습니다.

14.1.5. 모듈 작업

모듈식 애플리케이션이므로 httpd 서비스는 필요에 따라 런타임 시 동적으로 로드하거나 언로드할 수 있는 다수의 동적 공유 오브젝트 (DSO)와 함께 배포됩니다. Red Hat Enterprise Linux 7에서 이러한 모듈은 /usr/lib64/httpd/modules/ 에 있습니다.

14.1.5.1. 모듈 로드

특정 DSO 모듈을 로드하려면 LoadModule 지시문을 사용합니다. 별도의 패키지에서 제공하는 모듈에는 /etc/httpd/conf.d/ 디렉터리에 자체 구성 파일이 있는 경우가 많습니다.

예 14.1. mod_ssl DSO 로드

LoadModule ssl_module modules/mod_ssl.so

완료되면 웹 서버를 다시 시작하여 구성을 다시 로드합니다. httpd 서비스를 다시 시작하는 방법에 대한 자세한 내용은 14.1.3.3절. “서비스를 다시 시작”에서 참조하십시오.

14.1.5.2. 모듈 작성

새 DSO 모듈을 생성하려는 경우 httpd-devel 패키지가 설치되어 있는지 확인합니다. 이렇게 하려면 root로 다음 명령을 입력합니다:

~]# yum install httpd-devel

이 패키지에는 모듈을 컴파일하는 데 필요한 파일, 헤더 파일 및 APache eXtenSion (pxs) 유틸리티가 포함되어 있습니다.

작성되고 나면 다음 명령을 사용하여 모듈을 빌드할 수 있습니다.

~]# apxs -i -a -c module_name.c

빌드가 성공하면 Apache HTTP Server와 함께 배포되는 다른 모듈과 동일한 방식으로 모듈을 로드할 수 있어야 합니다.

14.1.6. 가상 호스트 설정

Apache HTTP Server의 가상 호스팅을 사용하면 서버에서 요청 중인 IP 주소, 호스트 이름 또는 포트를 기반으로 다양한 정보를 제공할 수 있습니다.

이름 기반 가상 호스트를 생성하려면 예제 구성 파일 /usr/share/doc/httpd-VERSION/httpd-vhosts.conf/etc/httpd/conf.d/ 디렉터리에 복사하고 @@Port@@ @@@@@@@@@@@ 자리 표시자 값을 대체합니다. 예 14.2. “가상 호스트 구성 예” 에 표시된 대로 요구 사항에 따라 옵션을 사용자 지정합니다.

예 14.2. 가상 호스트 구성 예

<VirtualHost *:80>
  ServerAdmin webmaster@penguin.example.com
  DocumentRoot "/www/docs/penguin.example.com"
  ServerName penguin.example.com
  ServerAlias www.penguin.example.com
  ErrorLog "/var/log/httpd/dummy-host.example.com-error_log"
  CustomLog "/var/log/httpd/dummy-host.example.com-access_log" common
</VirtualHost>

ServerName 은 시스템에 할당된 유효한 DNS 이름이어야 합니다. <VirtualHost> 컨테이너는 고도로 사용자 지정할 수 있으며 기본 서버 구성 내에서 사용 가능한 대부분의 지시문을 허용합니다. 이 컨테이너 내에서 지원되지 않는 지시문에는 SuexecUserGroup 으로 교체된 UserGroup 이 포함됩니다.

참고

기본이 아닌 포트에서 수신하도록 가상 호스트를 구성하는 경우 그에 따라 /etc/httpd/conf/httpd.conf 파일의 글로벌 설정 섹션에서 Listen 지시문을 업데이트해야 합니다.

새로 생성된 가상 호스트를 활성화하려면 먼저 웹 서버를 다시 시작해야 합니다. httpd 서비스를 다시 시작하는 방법에 대한 자세한 내용은 14.1.3.3절. “서비스를 다시 시작”에서 참조하십시오.

14.1.7. SSL 서버 설정

SSL( Secure Sockets Layer )은 서버와 클라이언트가 안전하게 통신할 수 있도록 하는 암호화 프로토콜입니다. TLS( Transport Layer Security )라는 확장 버전과 향상된 버전과 함께 개인 정보 보호 및 데이터 무결성을 보장합니다. OpenSSL 툴킷을 사용하여 SSL/TLS 지원을 제공하는 모듈인 mod_ssl 과 함께 Apache HTTP 서버를 SSL 서버 라고 합니다. Red Hat Enterprise Linux는 또한 TLS 구현으로 Mozilla NSS 사용을 지원합니다. Mozilla NSS에 대한 지원은 mod_nss 모듈을 통해 제공됩니다.

인터셉트할 수 있는 사람이 읽고 수정할 수 있는 HTTP 연결과 달리, HTTP를 통해 SSL/TLS를 사용하면 전송된 콘텐츠를 검사하거나 수정할 수 없습니다. 이 섹션에서는 Apache HTTP Server 구성에서 이 모듈을 활성화하는 방법에 대한 기본 정보를 제공하고 개인 키 및 자체 서명 인증서를 생성하는 프로세스를 안내합니다.

14.1.7.1. 인증서 및 보안 개요

보안 통신은 키 사용에 기반합니다. 기존 또는 대칭 암호화 에서 두 트랜잭션 종료는 서로의 전송을 디코딩하는 데 사용할 수 있는 것과 동일한 키를 갖습니다. 반면 공개 또는 대칭 암호화에서는 두 개의 키가 서로 공존합니다. 개인 키는 비밀로 유지되며 일반적으로 공개 키와 공유되는 공개 키입니다. 공개 키로 인코딩된 데이터는 개인 키로만 디코딩될 수 있지만 개인 키로 인코딩된 데이터는 공개 키로만 디코딩될 수 있습니다.

SSL을 사용하여 보안 통신을 제공하려면 SSL 서버는CA( 인증 기관) 에서 서명한 디지털 인증서를 사용해야 합니다. 인증서는 서버의 다양한 속성(즉, 서버 호스트 이름, 회사 이름, 위치 등)과 CA의 개인 키를 사용하여 생성된 서명을 나열합니다. 이 서명은 특정 인증 기관이 인증서에 서명하고 인증서가 어떠한 방식으로든 수정되지 않았음을 보장합니다.

웹 브라우저가 새 SSL 연결을 설정하면 웹 서버에서 제공하는 인증서를 확인합니다. 인증서에 신뢰할 수 있는 CA의 서명이 없거나 인증서에 나열된 호스트 이름이 연결을 설정하는 데 사용되는 호스트 이름과 일치하지 않는 경우, 서버와 통신하지 않고 일반적으로 적절한 오류 메시지가 표시됩니다.

기본적으로 대부분의 웹 브라우저는 널리 사용되는 인증 기관 세트를 신뢰하도록 구성되어 있습니다. 이로 인해 대상 사용자가 연결을 신뢰할 수 있도록 보안 서버를 설정할 때 적절한 CA를 선택해야 합니다. 그렇지 않으면 오류 메시지가 표시되고 인증서를 수동으로 허용해야 합니다. 사용자가 인증서 오류를 재정의하도록 유도하면 공격자가 연결을 가로챌 수 있으므로 가능한 경우 신뢰할 수 있는 CA를 사용해야 합니다. 이에 대한 자세한 내용은 표 14.2. “공통 웹 브라우저에서 사용하는 CA 목록에 대한 정보” 을 참조하십시오.

표 14.2. 공통 웹 브라우저에서 사용하는 CA 목록에 대한 정보
웹 브라우저link

Mozilla Firefox

Mozilla 루트 CA 목록.

Opera

Opera에서 사용하는 루트 인증서에 대한 정보입니다.

Internet Explorer

Microsoft Windows에서 사용하는 루트 인증서에 대한 정보입니다.

chromium

Chromium 프로젝트에서 사용하는 루트 인증서에 대한 정보입니다.

SSL 서버를 설정할 때 인증서 요청 및 개인 키를 생성한 다음 인증서 요청, 회사 ID 증명, 인증 기관에 결제해야 합니다. CA에서 인증서 요청 및 ID를 확인하면 서버와 함께 사용할 수 있는 서명된 인증서를 보냅니다. 또는 CA 서명이 없는 자체 서명된 인증서를 만들 수도 있으므로 테스트 목적으로만 사용해야 합니다.

14.1.8. mod_ssl 모듈 활성화

mod_ssl 을 사용하여 SSL 또는 HTTPS 서버를 설정하려는 경우 동일한 포트를 사용하도록 구성된 mod_ns 와 같은 다른 애플리케이션 또는 모듈을 가질 수 없습니다. 포트 443 은 HTTPS의 기본 포트입니다.

mod_ssl 모듈 및 OpenSSL 툴킷을 사용하여 SSL 서버를 설정하려면 mod_sslopenssl 패키지를 설치합니다. root 로 다음 명령을 입력하십시오.

~]# yum install mod_ssl openssl

이렇게 하면 기본적으로 기본 Apache HTTP Server 구성 파일에 포함된 /etc/httpd/conf.d/ssl.confmod_ssl 구성 파일이 생성됩니다. 모듈을 로드하려면 14.1.3.3절. “서비스를 다시 시작” 에 설명된 대로 httpd 서비스를 다시 시작합니다.

중요

POODLE에서 설명하는 취약점으로 인해 다음을 수행합니다. SSLv3 취약점 (CVE-2014-3566)SSL 을 비활성화하고 TLSv1.1 또는 TLSv1.2 만 사용하는 것이 좋습니다. 이전 버전과의 호환성은 TLSv1.0 을 사용하여 수행할 수 있습니다. Red Hat에서 지원하는 많은 제품에는 SSLv2 또는 SSLv3 프로토콜을 사용하거나 기본적으로 이를 활성화할 수 있습니다. 그러나 이제 SSLv2 또는 SSLv3 를 사용하는 것이 좋습니다.

14.1.8.1. mod_ssl에서 SSL 및 TLS 활성화 및 비활성화

SSL 및 TLS 프로토콜의 특정 버전을 비활성화 및 활성화하려면구성 파일의 "# SSL Global Context" 섹션에 SSLProtocol 지시문을 추가하고 다른 곳에서 이를 제거하고 모든 "VirtualHost" 섹션의 기본 항목을 편집하여 전역적으로 수행합니다. 도메인별 VirtualHost 섹션에서 지정하지 않으면 전역 섹션에서 설정을 상속합니다. 프로토콜 버전이 비활성화되도록 하려면 관리자는 SSL 글로벌 컨텍스트 섹션에서 SSLProtocol 지정하거나 모든 도메인별 VirtualHost 섹션에서 지정해야 합니다.

SSLv2 및 SSLv3 비활성화

SSL 버전 2 및 SSL 버전 3을 비활성화하려면 모든 VirtualHost 섹션에서 SSL 버전 2 및 SSL 버전 3을 제외한 모든 기능을 활성화하려면 다음과 같이 진행하십시오.

  1. 루트 로서 /etc/httpd/conf.d/ssl.conf 파일을 열고 SSLProtocol 지시문의 모든 인스턴스를 검색합니다. 기본적으로 구성 파일에는 다음과 같은 섹션이 포함되어 있습니다.

    ~]# vi /etc/httpd/conf.d/ssl.conf
    #  SSL Protocol support:
    # List the enable protocol levels with which clients will be able to
    # connect. Disable SSLv2 access by default:
    SSLProtocol all -SSLv2

    이 섹션은 VirtualHost 섹션에 있습니다.

  2. 다음과 같이 SSLProtocol 행을 다음과 같이 편집합니다.

    #  SSL Protocol support:
    # List the enable protocol levels with which clients will be able to
    # connect. Disable SSLv2 access by default:
    SSLProtocol all -SSLv2 -SSLv3

    모든 VirtualHost 섹션에 대해 이 작업을 반복합니다. 파일을 저장하고 닫습니다.

  3. 다음과 같이 SSLProtocol 지시문의 모든 항목이 변경되었는지 확인합니다.

    ~]# grep SSLProtocol /etc/httpd/conf.d/ssl.conf
    SSLProtocol all -SSLv2 -SSLv3

    하나 이상의 기본 VirtualHost 섹션이 있는 경우 이 단계는 특히 중요합니다.

  4. 다음과 같이 Apache 데몬을 다시 시작하십시오.

    ~]# systemctl restart httpd

    모든 세션이 중단됩니다.

모든 SSL 및 TLS 프로토콜 비활성화 TLS 1 및 Up

TLS 버전 1 이상을 제외한 모든 SSL 및 TLS 프로토콜 버전을 비활성화하려면 다음과 같이 진행하십시오.

  1. 루트 로서 /etc/httpd/conf.d/ssl.conf 파일을 열고 SSLProtocol 지시문의 모든 인스턴스를 검색합니다. 기본적으로 파일에는 다음과 같은 섹션이 포함되어 있습니다.

    ~]# vi /etc/httpd/conf.d/ssl.conf
    #  SSL Protocol support:
    # List the enable protocol levels with which clients will be able to
    # connect. Disable SSLv2 access by default:
    SSLProtocol all -SSLv2
  2. 다음과 같이 SSLProtocol 행을 다음과 같이 편집합니다.

    #  SSL Protocol support:
    # List the enable protocol levels with which clients will be able to
    # connect. Disable SSLv2 access by default:
    SSLProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2

    파일을 저장하고 닫습니다.

  3. 다음과 같이 변경 사항을 확인합니다.

    ~]# grep SSLProtocol /etc/httpd/conf.d/ssl.conf
    SSLProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2
  4. 다음과 같이 Apache 데몬을 다시 시작하십시오.

    ~]# systemctl restart httpd

    모든 세션이 중단됩니다.

SSL 및 TLS 프로토콜 상태 테스트

어떤 버전의 SSL 및 TLS가 활성화되어 있는지 확인하려면 openssl s_client -connect 명령을 사용하십시오. 명령에는 다음과 같은 형식이 있습니다.

openssl s_client -connect hostname:port -protocol

여기서 port 는 테스트할 포트이고 프로토콜 은 테스트할 프로토콜 버전입니다. 로컬에서 실행되는 SSL 서버를 테스트하려면 호스트 이름으로 localhost 를 사용합니다. 예를 들어 보안 HTTPS 연결에 대한 기본 포트를 테스트하려면 포트 443 을 사용하여 SSLv3가 활성화되어 있는지 확인하고 다음과 같이 명령을 실행합니다.

~]# openssl s_client -connect localhost:443 -ssl3
CONNECTED(00000003)
139809943877536:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1257:SSL alert number 40
139809943877536:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:596:
output omitted
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
  Protocol : SSLv3
output truncated

위의 출력은 핸드셰이크에 실패하여 암호가 협상되지 않았음을 나타냅니다.

~]$ openssl s_client -connect localhost:443 -tls1_2
CONNECTED(00000003)
depth=0 C = --, ST = SomeState, L = SomeCity, O = SomeOrganization, OU = SomeOrganizationalUnit, CN = localhost.localdomain, emailAddress = root@localhost.localdomain
output omitted
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
  Protocol : TLSv1.2
output truncated

위 출력은 핸드셰이크의 실패가 발생하지 않았으며 일련의 암호 집합이 협상되었음을 나타냅니다.

openssl s_client 명령 옵션은 s_client(1) 매뉴얼 페이지에 설명되어 있습니다.

SSLv3 취약점 및 테스트 방법에 대한 자세한 내용은 Red Hat 지식베이스 문서 POODLE을 참조하십시오. SSLv3 취약점 (CVE-2014-3566).

14.1.9. mod_nss 모듈 활성화

mod_nss 를 사용하여 HTTPS 서버를 설정하려는 경우 기본적으로 mod_ssl 이 포트 443 을 사용하므로 기본 설정과 함께 mod_ssl 패키지를 설치할 수 없습니다. 그러나 이는 기본 HTTPS 포트입니다. 가능한 경우 패키지를 제거합니다.

mod_ssl 을 제거하려면 root 로 다음 명령을 입력합니다.

~]# yum remove mod_ssl
참고

다른 용도로 mod_ssl 이 필요한 경우 포트의 포트가 443 으로 변경될 때 mod_ssl이 mod_nss 와 충돌하지 않도록 443 이외의 포트를 사용하도록 /etc/httpd/conf.d/ssl.conf 파일을 수정하십시오.

하나의 모듈만 포트를 보유할 수 있으므로 mod_nssmod_ssl 은 고유 포트를 사용하는 경우에만 동시에 존재할 수 있습니다. 이러한 이유로 mod_nss 는 기본적으로 8443 을 사용하지만 HTTPS의 기본 포트는 443 입니다. 포트는 Listen 지시문과 VirtualHost 이름 또는 주소에 의해 지정됩니다.

NSS의 모든 것은 "토크릿"과 관련이 있습니다. 소프트웨어 토큰은 NSS 데이터베이스에 있지만 인증서를 포함하는 물리적 토큰을 가질 수도 있습니다. OpenSSL을 사용하면 개별 인증서와 개인 키가 PEM 파일에 저장됩니다. NSS를 사용하면 데이터베이스에 저장됩니다. 각 인증서 및 키는 토큰과 연결되며 각 토큰에는 암호를 보호할 수 있습니다. 이 암호는 선택 사항이지만 암호를 사용하는 경우 Apache HTTP 서버에 시스템 시작 시 사용자 개입 없이 데이터베이스를 열기 위해 사본이 필요합니다.

mod_nss 구성

  1. mod_nssroot 로 설치합니다.

    ~]# yum install mod_nss

    그러면 /etc/httpd/conf.d/nss.confmod_nss 구성 파일이 생성됩니다. /etc/httpd/conf.d/ 디렉터리는 기본적으로 기본 Apache HTTP Server 구성 파일에 포함되어 있습니다. 모듈을 로드하려면 14.1.3.3절. “서비스를 다시 시작” 에 설명된 대로 httpd 서비스를 다시 시작합니다.

  2. root 로서 /etc/httpd/conf.d/nss.conf 파일을 열고 Listen 지시문의 모든 인스턴스를 검색합니다.

    다음과 같이 Listen 8443 행을 편집합니다.

    Listen 443

    포트 443HTTPS 의 기본 포트입니다.

  3. 기본 VirtualHost 기본:8443 행을 다음과 같이 편집합니다.

    VirtualHost default:443

    기본이 아닌 다른 가상 호스트 섹션이 있는 경우 편집합니다. 파일을 저장하고 닫습니다.

  4. Mozilla NSS는 /etc/httpd/conf.d/nss.conf 파일의 NSSCertificateDatabase 지시문으로 표시된 서버 인증서 데이터베이스에 인증서를 저장합니다. 기본적으로 경로는 설치 중에 생성된 NSS 데이터베이스인 /etc/httpd/alias 로 설정됩니다.

    기본 NSS 데이터베이스를 보려면 다음과 같이 명령을 실행합니다.

    ~]# certutil -L -d /etc/httpd/alias
    
    Certificate Nickname                     Trust Attributes
                                   SSL,S/MIME,JAR/XPI
    
    cacert                            CTu,Cu,Cu
    Server-Cert                         u,u,u
    alpha                            u,pu,u

    위의 명령 출력에서 Server-Cert 는 기본 NSSNickname 입니다. L 옵션 은 모든 인증서를 나열하거나 인증서 데이터베이스에 이름이 지정된 인증서에 대한 정보를 표시합니다. d 옵션은 인증서 및 키 데이터베이스 파일이 포함된 데이터베이스 디렉터리를 지정합니다. 자세한 명령행 옵션은 certutil(1) 도움말 페이지를 참조하십시오.

  5. 다른 데이터베이스를 사용하도록 mod_nss 를 구성하려면 /etc/httpd/conf.d/nss.conf 파일에서 NSSCertificateDatabase 행을 편집합니다. 기본 파일에는 VirtualHost 섹션에 다음 행이 있습니다.

    #  Server Certificate Database:
    #  The NSS security database directory that holds the certificates and
    #  keys. The database consists of 3 files: cert8.db, key3.db and secmod.db.
    #  Provide the directory that these files exist.
    NSSCertificateDatabase /etc/httpd/alias

    위의 명령 출력에서 alias 는 기본 NSS 데이터베이스 디렉터리인 /etc/httpd/alias/ 입니다.

  6. 기본 NSS 인증서 데이터베이스에 암호를 적용하려면 root 로 다음 명령을 사용하십시오.

    ~]# certutil -W -d /etc/httpd/alias
    Enter Password or Pin for "NSS Certificate DB":
    Enter a password which will be used to encrypt your keys.
    The password should be at least 8 characters long,
    and should contain at least one non-alphabetic character.
    
    Enter new password:
    Re-enter password:
    Password changed successfully.
  7. HTTPS 서버를 배포하기 전에 CA(인증 기관)에서 서명한 인증서를 사용하여 새 인증서 데이터베이스를 생성합니다.

    예 14.3. Mozilla NSS 데이터베이스에 인증서 추가

    certutil 명령은 NSS 데이터베이스 파일에 CA 인증서를 추가하는 데 사용됩니다.

    certutil -d /etc/httpd/nss-db-directory/ -A -n "CA_certificate" -t CT,, -a -i certificate.pem

    위의 명령은 certificate.pem 이라는 PEM 형식의 파일에 저장된 CA 인증서를 추가합니다. d 옵션은 인증서 및 키 데이터베이스 파일을 포함하는 NSS 데이터베이스 디렉터리를 지정하고 -n 옵션은 인증서의 이름을 설정합니다. -t vGPU는 인증서가 TLS 클라이언트 및 서버에서 사용될 수 있음을 의미합니다. A 옵션은 기존 인증서를 인증서 데이터베이스에 추가합니다. 데이터베이스가 없으면 생성됩니다. a 옵션을 사용하면 입력 또는 출력에 ASCII 형식을 사용할 수 있으며 -i 옵션은 certificate.pem 입력 파일을 명령에 전달합니다.

    자세한 명령행 옵션은 certutil(1) 도움말 페이지를 참조하십시오.

  8. NSS 데이터베이스는 개인 키를 보호하도록 암호로 보호되어야 합니다.

    예 14.4. Mozilla NSS 데이터베이스의 암호 설정

    certutil 툴을 사용하여 다음과 같이 NSS 데이터베이스의 암호를 설정할 수 있습니다.

    certutil -W -d /etc/httpd/nss-db-directory/

    예를 들어 기본 데이터베이스의 경우 다음과 같이 root 로 명령을 실행합니다.

    ~]# certutil -W -d /etc/httpd/alias
    Enter Password or Pin for "NSS Certificate DB":
    Enter a password which will be used to encrypt your keys.
    The password should be at least 8 characters long,
    and should contain at least one non-alphabetic character.
    
    Enter new password:
    Re-enter password:
    Password changed successfully.
  9. 다음과 같이 NSSPassPhraseDialog 지시문으로 행을 변경하여 NSS 내부 소프트웨어 토큰을 사용하도록 mod_nss 를 구성합니다.

    ~]# vi /etc/httpd/conf.d/nss.conf
    NSSPassPhraseDialog file:/etc/httpd/password.conf

    이는 시스템 시작 시 수동 암호 입력을 방지하기 위한 것입니다. 소프트웨어 토큰은 NSS 데이터베이스에 있지만 인증서가 포함된 물리적 토큰을 가질 수도 있습니다.

  10. NSS 데이터베이스에 포함된 SSL 서버 인증서가 RSA 인증서인 경우 NSSNickname 매개변수의 주석을 제거하고 위의 4 단계에 표시된 nickname과 일치하는지 확인합니다.

    ~]# vi /etc/httpd/conf.d/nss.conf
    NSSNickname Server-Cert

    NSS 데이터베이스에 포함된 SSL 서버 인증서가 ECC 인증서인 경우 NSSECCNickname 매개변수의 주석을 제거하고 위의 4 단계에 표시된 nickname과 일치하는지 확인합니다.

    ~]# vi /etc/httpd/conf.d/nss.conf
    NSSECCNickname Server-Cert

    NSSCertificateDatabase 매개변수의 주석을 제거하고 단계 4에 표시된 NSS 데이터베이스 디렉토리를 가리키거나 위의 5단계에서 구성된 NSS 데이터베이스 디렉토리를 가리킵니다.

    ~]# vi /etc/httpd/conf.d/nss.conf
    NSSCertificateDatabase /etc/httpd/alias

    /etc/httpd/alias 를 사용할 인증서 데이터베이스의 경로로 바꿉니다.

  11. /etc/httpd/password.conf 파일을 root 로 만듭니다.

    ~]# vi /etc/httpd/password.conf

    다음 형식으로 행을 추가합니다.

    internal:password

    위의 6단계에서 NSS 보안 데이터베이스에 적용된 암호로 암호 교체

  12. /etc/httpd/password.conf 파일에 적절한 소유권 및 권한을 적용합니다.

    ~]# chgrp apache /etc/httpd/password.conf
    ~]# chmod 640 /etc/httpd/password.conf
    ~]# ls -l /etc/httpd/password.conf
    -rw-r-----. 1 root apache 10 Dec 4 17:13 /etc/httpd/password.conf
  13. /etc/httpd/password.conf 에서 소프트웨어 토큰을 사용하도록 mod_nss 를 구성하려면 /etc/httpd/conf.d/nss.conf 를 다음과 같이 편집합니다.

    ~]# vi /etc/httpd/conf.d/nss.conf
  14. 에 설명된 대로 변경 사항을 적용하려면 Apache 서버를 다시 시작합니다. 14.1.3.3절. “서비스를 다시 시작”
중요

POODLE에서 설명하는 취약점으로 인해 다음을 수행합니다. SSLv3 취약점 (CVE-2014-3566)SSL 을 비활성화하고 TLSv1.1 또는 TLSv1.2 만 사용하는 것이 좋습니다. 이전 버전과의 호환성은 TLSv1.0 을 사용하여 수행할 수 있습니다. Red Hat에서 지원하는 많은 제품에는 SSLv2 또는 SSLv3 프로토콜을 사용하거나 기본적으로 이를 활성화할 수 있습니다. 그러나 이제 SSLv2 또는 SSLv3 를 사용하는 것이 좋습니다.

14.1.9.1. mod_nss에서 SSL 및 TLS 활성화 및 비활성화

SSL 및 TLS 프로토콜의 특정 버전을 비활성화 및 활성화하려면구성 파일의 "# SSL Global Context" 섹션에 NSSProtocol 지시문을 추가하고 다른 곳에서 이를 제거하고 모든 "VirtualHost" 섹션의 기본 항목을 편집하여 전역적으로 수행합니다. 도메인별 VirtualHost 섹션에서 지정하지 않으면 전역 섹션에서 설정을 상속합니다. 프로토콜 버전이 비활성화되도록 하려면 관리자는 "SSL 글로벌 컨텍스트" 섹션에서 NSSProtocol 지정하거나 모든 도메인별 VirtualHost 섹션에 지정해야 합니다.

모든 SSL 및 TLS 프로토콜 사용 안 함 TLS 1 및 Up in mod_nss 비활성화

TLS 버전 1 이상을 제외한 모든 SSL 및 TLS 프로토콜 버전을 비활성화하려면 다음과 같이 진행하십시오.

  1. 루트 로서 /etc/httpd/conf.d/nss.conf 파일을 열고 NSSProtocol 지시문의 모든 인스턴스를 검색합니다. 기본적으로 구성 파일에는 다음과 같은 섹션이 포함되어 있습니다.

    ~]# vi /etc/httpd/conf.d/nss.conf
    #  SSL Protocol:
    output omitted
    #  Since all protocol ranges are completely inclusive, and no protocol in the
    #  middle of a range may be excluded, the entry "NSSProtocol SSLv3,TLSv1.1"
    #  is identical to the entry "NSSProtocol SSLv3,TLSv1.0,TLSv1.1".
    NSSProtocol SSLv3,TLSv1.0,TLSv1.1

    이 섹션은 VirtualHost 섹션에 있습니다.

  2. 다음과 같이 NSSProtocol 행을 다음과 같이 편집합니다.

    #  SSL Protocol:
    NSSProtocol TLSv1.0,TLSv1.1

    모든 VirtualHost 섹션에 대해 이 작업을 반복합니다.

  3. 다음과 같이 Listen 8443 행을 편집합니다.

    Listen 443
  4. 기본 VirtualHost 기본:8443 행을 다음과 같이 편집합니다.

    VirtualHost default:443

    기본이 아닌 다른 가상 호스트 섹션이 있는 경우 편집합니다. 파일을 저장하고 닫습니다.

  5. 다음과 같이 NSSProtocol 지시문의 모든 항목이 변경되었는지 확인합니다.

    ~]# grep NSSProtocol /etc/httpd/conf.d/nss.conf
    #  middle of a range may be excluded, the entry "NSSProtocol SSLv3,TLSv1.1"
    #  is identical to the entry "NSSProtocol SSLv3,TLSv1.0,TLSv1.1".
    NSSProtocol TLSv1.0,TLSv1.1

    하나 이상의 VirtualHost 섹션이 있는 경우 이 단계는 특히 중요합니다.

  6. 다음과 같이 Apache 데몬을 다시 시작하십시오.

    ~]# service httpd restart

    모든 세션이 중단됩니다.

mod_nss에서 SSL 및 TLS 프로토콜 상태 테스트

mod_nss 에서 활성화되거나 비활성화되는 SSL 및 TLS 버전을 확인하려면 openssl s_client -connect 명령을 사용하십시오. openssl 패키지를 root 로 설치합니다.

~]# yum install openssl

openssl s_client -connect 명령의 형식은 다음과 같습니다.

openssl s_client -connect hostname:port -protocol

여기서 port 는 테스트할 포트이고 프로토콜 은 테스트할 프로토콜 버전입니다. 로컬에서 실행되는 SSL 서버를 테스트하려면 호스트 이름으로 localhost 를 사용합니다. 예를 들어 보안 HTTPS 연결에 대한 기본 포트를 테스트하려면 포트 443 을 사용하여 SSLv3가 활성화되어 있는지 확인하고 다음과 같이 명령을 실행합니다.

~]# openssl s_client -connect localhost:443 -ssl3
CONNECTED(00000003)
3077773036:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:s3_pkt.c:337:
output omitted
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
  Protocol : SSLv3
output truncated

위의 출력은 핸드셰이크에 실패하여 암호가 협상되지 않았음을 나타냅니다.

~]$ openssl s_client -connect localhost:443 -tls1
CONNECTED(00000003)
depth=1 C = US, O = example.com, CN = Certificate Shack
output omitted
New, TLSv1/SSLv3, Cipher is AES128-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
  Protocol : TLSv1
output truncated

위 출력은 핸드셰이크의 실패가 발생하지 않았으며 일련의 암호 집합이 협상되었음을 나타냅니다.

openssl s_client 명령 옵션은 s_client(1) 매뉴얼 페이지에 설명되어 있습니다.

SSLv3 취약점 및 테스트 방법에 대한 자세한 내용은 Red Hat 지식베이스 문서 POODLE을 참조하십시오. SSLv3 취약점 (CVE-2014-3566).

14.1.10. 기존 키 및 인증서 사용

이전에 생성된 키와 인증서가 있는 경우 새 파일을 생성하는 대신 이러한 파일을 사용하도록 SSL 서버를 구성할 수 있습니다. 이 작업을 수행할 수 없는 경우 다음 두 가지 상황만 있습니다.

  1. IP 주소 또는 도메인 이름을 변경하고 있습니다.

    인증서는 특정 IP 주소 및 도메인 이름 쌍에 대해 발급됩니다. 이러한 값 중 하나가 변경되면 인증서가 유효하지 않습니다.

  2. VeriSign의 인증서가 있고 서버 소프트웨어를 변경하고 있습니다.

    널리 사용되는 인증 기관인 RuntimeClass는 특정 소프트웨어 제품, IP 주소 및 도메인 이름에 대한 인증서를 발행합니다. 소프트웨어 제품을 변경하면 인증서가 유효하지 않습니다.

위의 두 경우 모두 새 인증서를 가져와야 합니다. 이 항목에 대한 자세한 내용은 14.1.11절. “새 키 및 인증서 생성” 을 참조하십시오.

기존 키와 인증서를 사용하려면 관련 파일을 각각 /etc/pki/tls/private//etc/pki/tls/certs/ 디렉토리로 이동합니다. root 로 다음 명령을 실행하여 이를 수행할 수 있습니다.

~]# mv key_file.key /etc/pki/tls/private/hostname.key
~]# mv certificate.crt /etc/pki/tls/certs/hostname.crt

그런 다음 /etc/httpd/conf.d/ssl.conf 구성 파일에 다음 행을 추가합니다.

SSLCertificateFile /etc/pki/tls/certs/hostname.crt
SSLCertificateKeyFile /etc/pki/tls/private/hostname.key

업데이트된 구성을 로드하려면 14.1.3.3절. “서비스를 다시 시작” 에 설명된 대로 httpd 서비스를 다시 시작합니다.

예 14.5. Red Hat Secure Web Server의 키와 인증서 사용

~]# mv /etc/httpd/conf/httpsd.key /etc/pki/tls/private/penguin.example.com.key
~]# mv /etc/httpd/conf/httpsd.crt /etc/pki/tls/certs/penguin.example.com.crt

14.1.11. 새 키 및 인증서 생성

새 키와 인증서 쌍을 생성하려면 crypto-utils 패키지를 시스템에 설치해야 합니다. 이를 설치하려면 root 로 다음 명령을 입력합니다.

~]# yum install crypto-utils

이 패키지는 SSL 인증서 및 개인 키를 생성 및 관리하는 도구 집합을 제공하며 키 생성 프로세스를 통해 안내하는 Red Hat 키 쌍 생성 유틸리티인 genkey 가 포함되어 있습니다.

중요

서버에 이미 유효한 인증서가 있고 새 인증서로 교체하는 경우 다른 일련 번호를 지정합니다. 이렇게 하면 클라이언트 브라우저에 이 변경 사항이 알림을 받고 이 새 인증서를 예상대로 업데이트하고 페이지에 액세스하지 못합니다. 사용자 지정 일련번호를 root 로 사용하여 새 인증서를 생성하려면 genkey 대신 다음 명령을 사용하십시오.

~]# openssl req -x509 -new -set_serial number -key hostname.key -out hostname.crt
참고

시스템에 특정 호스트 이름에 대한 키 파일이 이미 있는 경우 genkey 는 시작을 거부합니다. 이 경우 다음 명령을 사용하여 기존 파일을 root 로 제거합니다.

~]# rm /etc/pki/tls/private/hostname.key

유틸리티를 실행하려면 루트 genkey 명령을 입력한 다음 적절한 호스트 이름(예: Penguin .example.com)을 입력합니다.

~]# genkey hostname

키 및 인증서 생성을 완료하려면 다음 단계를 수행합니다.

  1. 키와 인증서를 저장할 대상 위치를 검토합니다.

    그림 14.1. genkey 유틸리티 실행

    genkey 유틸리티 실행

    Tab 키를 사용하여 Next 버튼을 선택하고 Enter 를 눌러 다음 화면으로 진행합니다.

  2. 위쪽아래쪽 화살표 키를 사용하여 적절한 키 크기를 선택합니다. 더 큰 키는 보안이 높아지지만 서버의 응답 시간도 증가합니다. NIST는 2048비트 를 사용하는 것이 좋습니다. NIST 특수 발행 800-131A 를 참조하십시오.

    그림 14.2. 키 크기 선택

    키 크기 선택

    완료되면 Tab 키를 사용하여 Next 버튼을 선택하고 Enter 를 눌러 임의의 비트 생성 프로세스를 시작합니다. 선택한 키 크기에 따라 다소 시간이 걸릴 수 있습니다.

  3. 인증서 요청을 인증 기관에 보낼지 여부를 결정합니다.

    그림 14.3. 인증서 요청 생성

    인증서 요청 생성

    Tab 키를 사용하여 Yes 를 선택하여 인증서 요청을 작성하거나 No 를 선택하여 자체 서명된 인증서를 생성합니다. 그런 다음 Enter 를 눌러 선택을 확인합니다.

  4. Spacebar 키를 사용하여 개인 키 암호화를 활성화([*])하거나 사용하지 않도록 설정합니다.

    그림 14.4. 개인 키 암호화

    개인 키 암호화

    Tab 키를 사용하여 Next 버튼을 선택하고 Enter 를 눌러 다음 화면으로 진행합니다.

  5. 개인 키 암호화를 활성화한 경우 적절한 암호를 입력합니다. 보안상의 이유로 입력한 대로 표시되지 않으며 최소 5자 이상이어야 합니다.

    그림 14.5. 암호를 입력

    암호를 입력

    Tab 키를 사용하여 Next 버튼을 선택하고 Enter 를 눌러 다음 화면으로 진행합니다.

    중요

    서버를 시작하려면 올바른 암호를 입력해야 합니다. 이를 손실하는 경우 새 키와 인증서를 생성해야 합니다.

  6. 인증서 세부 정보를 사용자 지정합니다.

    그림 14.6. 인증서 정보 지정

    인증서 정보 지정

    Tab 키를 사용하여 Next 버튼을 선택하고 Enter 를 눌러 키 생성을 완료합니다.

  7. 이전에 인증서 요청 생성을 활성화한 경우 인증 기관으로 전송하라는 메시지가 표시됩니다.

    그림 14.7. 인증서 요청을 보내는 방법에 대한 지침

    인증서 요청을 보내는 방법에 대한 지침

    Enter 를 눌러 쉘 프롬프트로 돌아갑니다.

생성된 키 및 인증서 위치를 /etc/httpd/conf.d/ssl.conf 구성 파일에 추가합니다.

SSLCertificateFile /etc/pki/tls/certs/hostname.crt
SSLCertificateKeyFile /etc/pki/tls/private/hostname.key

마지막으로, 업데이트된 구성이 로드되도록 14.1.3.3절. “서비스를 다시 시작” 에 설명된 대로 httpd 서비스를 다시 시작합니다.

14.1.12. 명령줄을 사용하여 HTTP 및 HTTPS의 방화벽 구성

Red Hat Enterprise Linux는 기본적으로 HTTPHTTPS 트래픽을 허용하지 않습니다. 시스템이 웹 서버 역할을 하도록 하려면 firewalld 의 지원되는 서비스를 사용하여 HTTPHTTPS 트래픽이 필요에 따라 방화벽을 통과할 수 있도록 합니다.

명령줄을 사용하여 HTTP 를 활성화하려면 root 로 다음 명령을 실행합니다.

~]# firewall-cmd --add-service http
 success

명령줄을 사용하여 HTTPS 를 활성화하려면 root 로 다음 명령을 실행합니다.

~]# firewall-cmd --add-service https
 success

이러한 변경 사항은 다음 시스템을 시작한 후에도 유지되지 않습니다. 방화벽을 영구적으로 변경하려면 --permanent 옵션을 추가하는 명령을 반복합니다.

14.1.12.1. 명령줄을 사용하여 예정된 HTTPS 및 HTTPS에 대한 네트워크 액세스 확인

방화벽이 구성된 서비스를 확인하려면 명령줄을 사용하여 root 로 다음 명령을 실행합니다.

~]# firewall-cmd --list-all
public (default, active)
 interfaces: em1
 sources:
 services: dhcpv6-client ssh
output truncated

기본 설치에서 가져온 예에서는 방화벽이 활성화되지만 HTTPHTTPS 는 통과할 수 없습니다.

HTTPHTTP 방화벽 서비스가 활성화되면 services 행이 다음과 유사합니다.

services: dhcpv6-client http https ssh

방화벽 서비스 활성화 또는 firewalld 를 사용하여 포트 열기 및 닫기에 대한 자세한 내용은 Red Hat Enterprise Linux 7 보안 가이드 를 참조하십시오.

14.1.13. 추가 리소스

Apache HTTP Server에 대한 자세한 내용은 다음 리소스를 참조하십시오.

설치된 문서
  • httpd(8) - 명령줄 옵션의 전체 목록을 포함하는 httpd 서비스의 도움말 페이지입니다.
  • genkey(1) - crypto-utils 패키지에서 제공하는 genkey 유틸리티의 도움말 페이지.
  • apachectl(8) - Apache HTTP 서버 제어 인터페이스의 도움말 페이지.
설치 가능한 문서
  • http://localhost/manual/ - 해당 지시문 및 사용 가능한 모듈에 대한 전체 설명과 함께 Apache HTTP Server의 공식 문서입니다. 이 설명서에 액세스하려면 httpd-manual 패키지가 설치되어 있고 웹 서버가 실행 중이어야 합니다.

    문서에 액세스하기 전에 root 로 다음 명령을 실행합니다.

    ~] yum install httpd-manual ~] apachectl graceful
온라인 문서
  • http://httpd.apache.org/ - 모든 지시문 및 기본 모듈에 대한 문서가 있는 Apache HTTP Server의 공식 웹 사이트.
  • http://www.openssl.org/ - 추가 문서가 포함된 OpenSSL 홈 페이지, 자주 묻는 질문, 메일링 목록에 대한 링크, 기타 유용한 리소스입니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.