본문 바로가기
OPEN 툴

CentOS 7에서 암호화하도록 Apache를 보안 화하는 방법 - SSL 보안서버, 무료인증서, 초간편설정

본문

소개

이 튜토리얼에서는 Apache를 실행중인 CentOS 7 서버에서 웹 서버로 TLS / SSL 인증서를 암호화 하도록 설정하는 방법을 보여줍니다 또한 cron 작업을 사용하여 인증서 갱신 프로세스를 자동화하는 방법에 대해서도 설명합니다.

SSL 인증서는 웹 서버 내에서 서버와 클라이언트 간의 트래픽을 암호화하여 응용 프로그램에 액세스하는 사용자에게 추가적인 보안을 제공합니다. Let 's Encrypt는 신뢰할 수있는 인증서를 무료로 얻고 설치할 수있는 쉬운 방법을 제공합니다.

선결 요건

이 가이드를 작성하려면 다음이 필요합니다.

  • 루트가 아닌 sudo 사용자가있는 CentOS 7 서버. 초기 서버 설정 가이드 를 따라 설정할 수 있습니다.
  • A 또는 CNAME 레코드 를 사용하여 서버에 대해 구성된 하나 이상의 도메인 이름 정확한 절차는 도메인 이름 등록 기관 또는 호스팅 서비스에 따라 다릅니다. 도메인 이름을 구입하여 DigitalOcean 이름 서버와 함께 사용하고자하는 경우 DigitalOcean을 사용 하여 호스트 이름 을 설정하는 방법 에 대한 안내서를 읽어 올바른 기록을 설정할 수 있습니다.

이 가이드에서는 도메인에 Let 's Encrypt 인증서를 설치합니다 example.com이 내용은 안내서 전체에서 참조 할 것이지만, 추후에 자신의 도메인으로 대체해야합니다.

계속 진행할 준비가되면 sudo계정을 사용하여 서버에 로그인하십시오.

1 단계 : 필수 소프트웨어 설치

certbotLet 's Encrypt 클라이언트를 설치하고 SSL 인증서를 생성 하기 전에 Apache 웹 서버를 아직 설치하지 않은 경우이를 설치해야합니다. mod_ssl암호화 된 트래픽을 올바르게 처리 하려면 모듈을 설치해야합니다 마지막으로 우리는 필요한 패키지를 포함하여 CentOS를위한 추가 패키지를 제공하는 EPEL 저장소를 활성화 certbot해야합니다.

먼저 다음을 입력하여 EPEL 저장소를 활성화하십시오.

sudo yum install epel-release

이제 추가 저장소에 액세스 할 수 있으므로 다음을 입력하여 필요한 패키지를 모두 설치하십시오.

sudo yum install httpd mod_ssl python-certbot-apache

이제 사이트를 보호하는 데 필요한 모든 패키지가 있어야합니다.

2 단계 : Apache에 대한 액세스 구성

인증서를 요청하기 전에 Apache가 우리 서버에서 실행되고 외부 세계에 액세스 할 수 있도록해야합니다.

아파치가 실행되고 있는지 확인하려면 다음을 입력하십시오.

sudo systemctl start httpd

서비스 상태를 확인하여 Apache가 실행 중인지 확인하십시오.

systemctl status httpd
Output
● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2017-01-05 16:47:06 UTC; 1h 7min ago Docs: man:httpd(8) man:apachectl(8) Main PID: 9531 (httpd) Status: "Total requests: 10; Current requests/sec: 0; Current traffic: 0 B/sec" CGroup: /system.slice/httpd.service ├─9531 /usr/sbin/httpd -DFOREGROUND ├─9532 /usr/sbin/httpd -DFOREGROUND ├─9533 /usr/sbin/httpd -DFOREGROUND ├─9534 /usr/sbin/httpd -DFOREGROUND ├─9535 /usr/sbin/httpd -DFOREGROUND └─9536 /usr/sbin/httpd -DFOREGROUND Jan 05 16:47:05 centos-512mb-nyc3-01 systemd[1]: Starting The Apache HTTP Server... Jan 05 16:47:05 centos-512mb-nyc3-01 httpd[9531]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using ::1. Set the 'ServerName' directive globally to suppress this message Jan 05 16:47:06 centos-512mb-nyc3-01 systemd[1]: Started The Apache HTTP Server.

그것은 active정상쪽으로 말해야 합니다.

그런 다음 방화벽에서 포트 80과 443이 열려 있는지 확인하십시오. 방화벽을 실행하지 않는 경우에는 건너 뛸 수 있습니다.

당신이있는 경우 firewalld의 방화벽 실행, 당신은 입력하여 이러한 포트를 열 수 있습니다 :

sudo firewall-cmd --add-service=http sudo firewall-cmd --add-service=https sudo firewall-cmd --runtime-to-permanent

이있는 경우 의 iptables 방화벽 실행, 당신이 실행하는 데 필요한 명령은 현재 룰 세트에 크게 의존한다. 기본 규칙 세트의 경우 다음을 입력하여 HTTP 및 HTTPS 액세스를 추가 할 수 있습니다.

sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

curl을 사용하여 사이트에 연결할 수 있는지 확인하십시오.

curl example.com

기본 페이지의 HTML이 표시되어야합니다. 때문에 mod_ssl패키지는 기본적으로 자체 서명 된 SSL 인증서를 구성 당신이 사용하는 경우, 당신은뿐만 아니라 HTTPS와 도메인을 확인할 수 있습니다 -k신뢰할 수없는 인증서를 허용하는 플래그 :

curl -k https://example.com

이렇게하면 동일한 출력을보고 SSL 포트가 열려 있는지 확인할 수 있습니다.

3 단계 : Let 's Encrypt에서 SSL 인증서 요청

이제 Apache가 준비되었으므로 도메인에 대한 SSL 인증서를 요청할 수 있습니다.

certbotLet 's Encrypt 클라이언트 를 사용하여 Apache 용 SSL 인증서를 생성하는 것은 매우 간단합니다. 클라이언트는 매개 변수로 제공된 도메인에 유효한 새 SSL 인증서를 자동으로 가져와 설치합니다.

여러 도메인이나 하위 도메인에 유효한 단일 인증서를 설치하려는 경우 추가 매개 변수로 명령에 전달할 수 있습니다. 매개 변수 목록의 첫 번째 도메인 이름은 암호화를 통해 인증서를 만드는 데 사용되는 기본 도메인 이 될 것이므로 그 이유는 최상위 도메인 이름을 맨 처음으로 전달한 다음 추가 하위 도메인을 전달하는 것이 좋습니다 또는 별칭 :

sudo certbot --apache -d example.com -d www.example.com

이 예에서는 기본 도메인이됩니다 example.com.

대화 형 설치를 실행하고 단일 도메인 만 포함하는 인증서를 얻으려면 다음과 같이 certbot명령을 실행하십시오 .

sudo certbot --apache -d example.com

이 certbot유틸리티는 인증서 요청 절차 중에 도메인 정보를 묻는 메시지를 표시 할 수도 있습니다. 이 기능을 사용하려면 certbot도메인없이 호출 하십시오.

sudo certbot --apache

인증서 옵션을 사용자 지정하는 단계별 가이드가 제공됩니다. 손실 된 키 복구 및 통지에 대한 이메일 주소를 제공하라는 메시지가 표시됩니다. 명령 줄에 도메인을 지정하지 않은 경우 도메인을 입력하라는 메시지가 표시됩니다. 가상 호스트 파일이 지시문을 사용하여 ServerName명시 적으로 제공하는 도메인을 지정하지 않으면 가상 호스트 파일 을 선택하라는 메시지가 표시됩니다 (기본 ssl.conf파일이 작동해야 함).

또한 둘 다 사용하도록 설정 http하고 https모든 요청을 액세스 또는 강제로 리디렉션하도록 선택할 수 있습니다 https보안을 강화하려면 암호화 되지 않은 연결을 허용 할 특별한 필요가없는 경우 보안 옵션 을 선택하는 것이 좋습니다.

설치가 성공적으로 완료되면 다음과 유사한 메시지가 나타납니다.

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.com/fullchain.pem. Your cert
   will expire on 2016-04-21. To obtain a new version of the
   certificate in the future, simply run Let's Encrypt again.
 - If you lose your account credentials, you can recover through
   e-mails sent to user@example.com.
 - Your account credentials have been saved in your Let's Encrypt
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Let's
   Encrypt so making regular backups of this folder is ideal.
 - If you like Let's Encrypt, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

생성 된 인증서 파일은 디렉토리의 기본 도메인 다음에 명명 된 서브 디렉토리 내에서 사용 가능/etc/letsencrypt/live해야합니다.

SSL 인증서를 확인하기 전에 CentOS의 기본 SSL 구성을 수정하여 보안을 강화해야합니다.

4 단계 : Apache에 대해보다 안전한 SSL 설정 선택

CentOS 버전의 Apache와 함께 제공되는 기본 SSL 구성은 날짜가 약간이므로 최신 보안 문제에 취약합니다.

보다 안전한 SSL 관련 옵션을 구성하려면 ssl.conf파일 (또는 암호화 요청 요청 프로세스 중에 메시지가 표시되면 선택한 가상 호스트 파일)을여십시오.

sudo nano /etc/httpd/conf.d/ssl.conf

내부에서 우리는 먼저 SSLProtocoland와 SSLCipherSuiteline을 찾아 삭제하거나 주석 처리해야합니다. 우리가 잠시 동안 붙여 넣을 설정은 CentOS의 Apache에 포함 된 기본값보다 더 안전한 설정을 제공합니다 :

/etc/httpd/conf.d/ssl.conf
. . .
# SSLProtocol all -SSLv2
. . .
# SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA

다음으로 Apache SSL을보다 안전하게 설정하기 위해 Cipherli.st 사이트 에서 Remy van Elst 의 권장 사항을 사용 합니다. 이 사이트는 널리 사용되는 소프트웨어에 대한 간편한 암호화 설정을 제공합니다. 아파치 선택에 관한 그의 결정에 대해 더 많이 읽을 수 있다 .

참고 : 위에 링크 된 사이트의 권장 설정은 강력한 보안을 제공합니다. 경우에 따라 클라이언트와의 호환성이 높아질 수 있습니다. 이전 클라이언트를 지원해야하는 경우 "예, 기존 / 이전 소프트웨어에서 작동하는 암호 모음을 제공하십시오"라는 링크를 클릭하여 액세스 할 수있는 대체 목록이 있습니다.이 목록은 아래에 복사 된 항목으로 대체 될 수 있습니다.

어떤 구성을 사용할지 선택하는 일은 주로 무엇을 지원해야하는지에 달려 있습니다. 둘 다 훌륭한 보안을 제공 할 것입니다. 

우리의 목적을 위해 제공된 설정 전체를 복사 할 수 있습니다. 우리는 단지 두 가지 작은 변화를 만들 것입니다.

잠시 시간을내어 HTTP Strict Transport Security (HSTS ) 및 특히 "사전로드"기능 에 대해 읽어보십시오 .HSTS를 미리로드하면 보안이 향상되지만, 실수로 활성화되거나 잘못 설정된 경우에는 광범위한 결과가 발생할 수 있습니다. 이 가이드에서는 설정을 미리로드하지는 않지만 그 의미를 이해할 수 있으면 설정을 수정할 수 있습니다.

SSLSessionTicketsCentOS 7과 함께 제공되는 Apache 버전에서는이 지시어를 사용할 수 없으므로 지시어를 주석 처리합니다 .

사이트의 설정에 붙여 넣기 AFTER 의 마지막 VirtualHost블록 :

/etc/httpd/conf.d/ssl.conf
    . . .
</VirtualHost>
. . .

# Begin copied text
# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
# Disable preloading HSTS for now.  You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
#Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off 
SSLUseStapling on 
SSLStaplingCache "shmcb:logs/stapling-cache(150000)" 
# Requires Apache >= 2.4.11
# SSLSessionTickets Off

이러한 변경 작업이 끝나면 파일을 저장하고 닫을 수 있습니다.

다음을 입력하여 구문 오류가 있는지 구성을 확인하십시오.

sudo apachectl configtest
Output
. . . Syntax OK

마지막 줄이 읽혀 Syntax OK지면 계속 할 수 있습니다. 이 파일이 보이지 않으면 계속하기 전에 파일에서 오타가 없는지 확인하십시오.

  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

페이지 정보

최고관리자 작성일17-03-08 11:33 조회1,138회 댓글0건

첨부파일

댓글목록

등록된 댓글이 없습니다.

OPEN 툴 목록

게시물 검색

사이트 정보

  • 회사명 주인있소 / 대표 소담
  • 주소 강원도 속초시
  • 사업자 등록번호 123-45-67890
  • 전화 010-2026-0626 / 팩스 없음
  • 통신판매업신고번호 제 OO구 - 123호
  • 개인정보관리책임자 정보책임자명

고객센터

상단으로