본문 바로가기
Linux/SSL(보안서버)

보안서버 구축 - Let's Encrypt의 와일드카드 인증서

by aegypius 2020. 3. 17.
728x90
반응형

  작업중인 사이트가 거의 마무리 되어가는 이 시점에 SSL 인증서를 적용하기로 했다. 워드프레스는 미리 인증서를 적용해서 https로 만들어 놓은 후에 사이트 제작을 진행하는 것이 손이 덜 가는데 그누보드는 완료된 후에 http를 https로 전환해도 작업할 것이 많지 않다.

[root@tki /]# certbot certonly --manual --preferred-challenges=dns --email harepius@gmail.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d *.careinfo.kr -d careinfo.kr
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for careinfo.kr
dns-01 challenge for careinfo.kr

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.

Are you OK with your IP being logged?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.careinfo.kr with the following value:

YTkC0ZTWuwvL942dwyRoAMejnclCpTWgZwHftFH4j6Y

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.careinfo.kr with the following value:

g6DClj59Y4ovvrtJC11sh1OBRGJSQPoJpIodEmY2heY

Before continuing, verify the record is deployed.
(This must be set up in addition to the previous challenges; do not remove,
replace, or undo the previous challenge tasks yet. Note that you might be
asked to create multiple distinct TXT records with the same name. This is
permitted by DNS standards.)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/careinfo.kr/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/careinfo.kr/privkey.pem
   Your cert will expire on 2020-06-15. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

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

  인증서를 발급받는 과정에서 중간에 출력되는 문자열은 해당 도메인의 DNS 설정에 TXT 형식으로 추가해야 한다. 도메인의 소유권을 확인하는 절차이다. 홈페이지를 구글의 웹마스터도구에 등록할 때에도 이와 같은 도메인 인증방식으로 진행된다. 물론 인증파일을 다운받아서 해당 사이트의 최상위 디렉토리에 업로드하는 방법도 있다.

_acme-challenge.mydomain.kr.    IN    TXT    "YTkC0ZTWuwvL942dwyRoAMejnclCpTWgZwHftFH4j6Y"

  이와같이 출력된 텍스트를 존파일에 txt 레코드로 추가하고 네임서버를 재시작 해야지만 발급과정이 정상적으로 진행된다. 두 번째 출력되는 텍스트도 같은 방식으로 작업해야 한다. 

  특정 도메인에 대한 인증서를 발급받는 경우는 해당도메인의 설정이 자동으로 수정되지만 와일드카드 인증서의 경우에는 수동으로 작업해야 한다. 아래와 같이 변경하자. (주석문 중에서 #이 하나 붙은 것들은 기존의 80포트를 사용하는 http에 해당하는 것이고, ##은 php-fpm을 적용했던 것이다 -이건 아직도 작업중이다 -_-;)

<VirtualHost *:80>
ServerName careinfo.kr
ServerAlias www.careinfo.kr
RewriteEngine on
RewriteCond %{SERVER_NAME} =careinfo.kr [OR]
RewriteCond %{SERVER_NAME} =www.careinfo.kr [OR]
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
#  DocumentRoot /home/계정별/디렉토리
#  ServerName careinfo.kr
#  ServerAlias www.careinfo.kr
#  ErrorLog /var/log/httpd/careinfo.kr_error.log
#  CustomLog /var/log/httpd/careinfo.kr_access.log combined
##    <IfModule proxy_fcgi_module>
##      ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/home/계정별/디렉토리/
##    </Ifmodule>
</VirtualHost>

<ifModule mod_ssl.c>
<VirtualHost *:443>
   DocumentRoot /home/account/dir
   ServerName careinfo.kr
   ServerAlias www.careinfo.kr
   ErrorLog /var/log/httpd/error_logfile
   CustomLog /var/log/httpd/access_logfile combined
   SSLCertificateFile /etc/letsencrypt/live/careinfo.kr/cert.pem
   SSLCertificateKeyFile /etc/letsencrypt/live/careinfo.kr/privkey.pem
   Include /etc/letsencrypt/options-ssl-apache.conf
   SSLCertificateChainFile /etc/letsencrypt/live/careinfo.kr/chain.pem
   </VirtualHost>
</IfModule>

  www가 있을 때와 없을 때 모두 같은 사이트로 접속해야 한다면 대략 위와 같이 ServerAlias를 지정하자. 혹시 서버에서 운영중인 다른 사이트로 연결된다면 careinfo.krwww.careinfo.kr을 따로 분리해서 별도의 설정파일을 만드는 것도 방법이다.

728x90
반응형

댓글