본문 바로가기

Linux

[letsencrypt SSL] Apache + Ubuntu에 무료 SSL인증서 적용

728x90

 

오늘은 Apache + Ubuntu환경에서 무료 SSL인증서인 letsencrypt 적용하는 방법을 알아보겠습니다!

 

패키지 설치

# apt install letsencrypt -y
인증서 발급 방법
certbot certonly --webroot --webroot-path=[DocumentRoot] -d [도메인]
인증서 발급 방법으로는 아래 적힌 방법이 있는데 이 글은 webroot방식으로 발급받습니다!

 

1. Webroot : 사이트 디렉터리 내에 인증서 유효성을 확인할 수 있는 파일을 업로드하여 인증서를 발급하는 방법
  - 실제 작동하고 있는 웹서버의 특정 디렉터리의 특정 파일 쓰기 작업을 통해서 인증
  - 이 방식의 장점은 서버를 중단시킬 필요가 없음
  - 이 방법의 단점은 인증 명령에 하나의 도메인 인증서만 발급 가능
2. web Server
  - Nginx 나 Apach와 같은 웹서버에서 직접 SSL 인증을 실시하고 웹서버에 맞는 SSL 세팅값을 부여
  - 발급이나 갱신을 위해 웹 서버를 중단시킬 필요가 없음
  - 인증서 갱신 시 상황에 맞게 세팅을 자동으로 업데이트
  - 사용자가 세팅을 변경할 수 있지만 자동 업데이트 시 반영되지는 않음.
3. StandAlone : 사이트 작동을 멈추고 이 사이트의 네트워킹을 이용해 사이트 유효성을 확인해 Let's Encrypt SSL 인증서를 발급하는 방식.
  - 80 포트로 가상 standalone 웹서버를 띄워 인증서를 발급
  - 이 방식은 동시에 여러 도메인을 발급받을 수 있음
  - 그렇지만 인증서 발급 전에 서버를 중단하고 발급 완료 후 다시 서버를 시작해야 함.

긴급갱신 및 보안 고지의 경우 연락을 취할 수 있는 이메일 주소를 입력해 줍니다.

약관을 읽고 ACME 서버에 등록하기 위한 동의입니다.

스팸 이메일 수신 동의입니다.

발급에 이상이 없다면 위 이미지처럼 발급이 완료되었다는 메시지가 나옵니다!

 

에러

만약 발급이 정상적으로 되지 않고

이런 식의 에러가 난다면 의심해 볼 건

1. 포트가 열려있지 않음 (DNS 설정)

2. 도메인을 잘못 적음

3. 권한문제

정도가 있을 것 같습니다! 에러가 나는데도 계속 시도를 하다 보면

too many failde라는 오류가 발생하는데 해당 오류가 발생하면 약 30분 정도는 시도를 못하게 되니 주의 바랍니다 ㅠ

 

이제 SSL을 적용해야겠죠!

SSL 적용

SSL 적용을 위해

# vi /etc/apache2/sites-available/000-defualt.conf

명령어를 실행하여 conf 파일에 접근 후

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "인덱스 페이지경로"
#    <Location />
#      AuthType Basic
#      AuthName ""
#      AuthUserFile /etc/apache2/sites-available/.htpasswd
#      Require valid-user
#      Order allow,deny
#      Allow from all
#    </Location>  
       <IfModule mod_rewrite.c>
                RewriteEngine On
                RewriteCond %{HTTPS} off
                RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
        </IfModule>
   ErrorLog ${APACHE_LOG_DIR}/error.log
</VirtualHost>

위 사항대로 적용을 해주시면 되는데 DocumentRoot에는 index.html, index 등 페이지의 경로를 적어주시면 됩니다.

그리고 주석처리해 놓은 Location이 있는데 혹시나 접근 시 Basic으로 걸어두셨다면 해제 후 적용을 해야 되는 것 같습니다.

하단에 mod_rewrite.c가 보일 텐데 해당 부분은 http로 접근 시 https로 리다이렉트 하는 설정이므로 필요하신 경우 해당 설정도 추가해 주세요! 해당 설정을 하시고

# a2enmod rewrite

로 활성화 해주세요 ~!

000.conf의 설정은 끝났고 이제

# vi /etc/apache2/sites-available/default-ssl.conf

로 ssl.conf파일을 수정해 줍니다!

<VirtualHost _default_:443>
                ServerAdmin webmaster@localhost

                DocumentRoot "인덱스 페이지경로"

                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined              

                SSLEngine on

                SSLProtocol all -SSLv2 -SSLv3 -TLSv1
                SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

                SSLCertificateFile "/etc/letsencrypt/live/"발급받은 도메인"/fullchain.pem"
                SSLCertificateKeyFile "/etc/letsencrypt/live/"발급받은 도메인"/privkey.pem"
                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>

                JkMount /* bms
        </VirtualHost>

 

처음 들어갔을 때 있는 주석들은 제거하셔도 되고 위 설정대로 하시면 됩니다.

SSLProtocol과 SSLCipherSuite에 대한 설명은 밑에 적어두겠습니다.

 

SSLProtocol:

이 설정은 Apache 웹 서버가 사용할 SSL/TLS 프로토콜 버전을 지정합니다.

일반적으로 SSLProtocol 지시문은 Apache가 지원하는 SSL/TLS 프로토콜을 나열하는 데 사용됩니다. 이것은 클라이언트와 서버 간의 SSL/TLS 연결에서 사용할 수 있는 프로토콜을 결정합니다.

예를 들어, SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1와 같이 사용하면 모든 SSL/TLS 버전을 활성화하고 SSLv3, TLSv1, TLSv1.1은 비활성화됩니다.

SSLCipherSuite:

이 설정은 서버에서 허용할 SSL/TLS 암호화 알고리즘의 목록을 지정합니다.

SSLCipherSuite 지시문은 클라이언트와 서버 간의 SSL/TLS 연결에 사용할 수 있는 암호화 알고리즘을 제어합니다.

일반적으로 안전한 암호화 알고리즘과 키 교환 방법을 선택하여 보안 강화를 위해 사용됩니다.

예를 들어, SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!RC4와 같이 사용하면 강력한 암호화 알고리즘을 선호하고 중간 수준의 보안을 유지합니다.! aNULL은 인증되지 않은 NULL 암호화를 허용하지 않고! MD5와! RC4는 각각 MD5 해시 및 RC4 암호화를 비활성화합니다.

SSLHonorCipherOrder on과 같이 설정하면 서버는 SSLCipherSuite에서 정의된 암호화 알고리즘 순서를 엄격하게 준수하여 클라이언트가 제시한 암호화 알고리즘 목록에서 적절한 암호화 알고리즘을 선택합니다.

 

ssl.conf 활성화를 위해 명령어를 실행해 줍니다.

# a2ensite default-ssl.conf

a2ensite는 conf파일 활성화고 혹시나 비활성화하시려면

# a2dissite defualt-ssl.conf

를 해주시면 비활성화됩니다 ~

 

자! 이제 모든 설정이 끝났으므로 한번 확인을 해볼까요!

적용한 도메인으로 https 접근을 하시면 정상적으로 적용이 된 것을 확인하실 수 있습니다!

 

여기까지 SSL 인증서 적용을 알아보았습니다!!

모두 이상 없이 적용하시길 ~!!!

태클은 환영!

반응형