letsencrypt를 이용하여 내 사이트에 무료로 ssl 적용하기

이번엔 letsencrypt.org에서 무료로 배포하고 있는 오픈소스인 letsencrypt를 이용하여, apache 웹서버에 무료로 ssl을 적용할 수 있는 방법에 대해 포스팅 하겠습니다.

아파치 서버 버전 기준 : 2.2.X

 

기본적으로 ssl을 왜 적용해야하는지, ssl이 무엇인지에 대해 개념 공부가 필요하시다면

https://opentutorials.org/course/228/4894

위 링크를 통해 공부하고 오시면 되겠습니다!

 

 

1. git 설치하기. (이미 설치되어있는경우 무시)

yum install git

 

2. 다음의 저장소에서 소스를 가져와 /opt 디렉토리에 넣어준다.

cd /opt
git clone https://github.com/letsencrypt/letsencrypt

 

3. 디렉토리 이동 후 자동 설치

cd letsencrypt
./letsencrypt-auto --help

자동으로 관련 의존성 패키지들을 설치한다. 상당히 많이 설치하니 모두 설치될 때 까지 기다리세요. (1분 이상)

 

4. 자동으로 도메인에 설정

./letsencrypt-auto --apache -d yourdomain.com

다이얼로그가 뜹니다.
– 이메일을 입력하세요.
– 약관에 동의하세요.

 

5. 설정 완료!

설치가 완료되었으면 다음과 같은 메시지가 콘솔에 출력됩니다.

Currently, we only support configurations with one vhost per file

IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/your.domain.com/fullchain.pem. Your cert will
expire on 20YY-MM-DD. 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 master@fureweb.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.

 

엄청 간단하게 진행됩니다.

설치일로부터 3개월이 인증서 만료일로 나와있는데, 그런 경우 다시 작업을 수행해주면 갱신된다고 하니 확인해 보시면 될 것 같습니다.

다만, 위에서도 언급하고 있지만 멀티도메인을 자동으로 알아서 그 도메인에 맞는 ssl 설정 작업을 처리해주지는 않고 있는 상황입니다.

현재 ssl 관련 설정이나, 다른 도메인들이 많이 설정되어있는 경우 별도로 작업을 해 주어야 하는 경우가 있습니다.

현재 virtualhost 설정을 통해 여러 도메인을 운영하고 계시는 경우, 모르는 상태에서 auto옵션을 사용하지 않으시길 바랍니다!

 


 

만약, ssl.conf에서도 NameVirtualHost *:443으로 설정값을 컨트롤하실 수 있는 분이라면 다음과 같은 과정을 거치시기 바랍니다.

 

ssl.conf의 기존 내용을 싹 지우신 다음 (혹은 mv ssl.conf ssl.conf.20160425 형태로 이동시킨 뒤 vi ssl.conf 하시어 새로 작성하세요.)

아래 내용으로 대체해 주세요.

아래의 your.domain.com은 위 과정을 통해 발급받은 인증서가 들어있는 곳을 지정해 주셔야 하는 것은 알고 계시겠죠?


LoadModule ssl_module modules/mod_ssl.so

Listen 443

SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin

NameVirtualHost *:443

<VirtualHost *:443>

ServerName your.domain.com:443
ServerAlias your.domain.com:443
DocumentRoot /home/your.domain/wordpress

<Directory /home/your.domain/wordpress/>
DirectoryIndex index.php

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]
RewriteRule .? %{ENV:BASE}/index.php [L]
</IfModule>
</Directory>

ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
SSLCertificateFile /etc/letsencrypt/live/<strong>your.domain.com</strong>/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/<strong>your.domain.com</strong>/privkey.pem

<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>

SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0

CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
SSLCertificateChainFile /etc/letsencrypt/live/<strong>your.domain.com</strong>/chain.pem

</VirtualHost>

 

위와 같은 형태로, 위에서 발급되었던 key를 연동시켜 사용할 수 있도록 합니다.

(사용하시는 텍스트에디터에 위 xml 코드를 refactoring 해서 보시면 편하실거예요.)

 

위 설정은 워드프레스 환경에서 index.php에 대한 요청을 생략할 수 있도록 RewriteRule을 적용해 놓은 것으로,

사용을 원하시는 분들의 서버 환경, 혹은 애플리케이션 환경에 따라 설정하여 사용하시기 바랍니다.

You may also like...

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.