본문 바로가기
Works/Web

[Web] Mac OS 에서 SSL 인증 받기

by Vader87 2021. 1. 2.
반응형

PWA 개발을 해보고 싶어서 Mac OS + ipTime 조합으로 Https 환경 구성을 해보고자 합니다. ipTime 공유기를 사용하면 무료로 DDNS 를 이용할 수 있습니다.

참고로 Let's Encrypt 로 iptime DDNS 를 등록하려고 하면 안된다는 글들이 있는데, 제가 등록에 성공 한걸 보니 안되는건 아니고 1년에 할당가능한 양이 정해진 듯 해서 연초에 빠르게 하면 가능한것 같습니다.

letsencrypt.org/ko/getting-started/

 

시작하기 - Let's Encrypt - 무료 SSL/TLS 인증서

마지막 업데이트:Dec 21, 2019 참고: 번역 이후 영어 버전이 업데이트되었습니다 (Feb 11, 2020) 영어로 보기 웹 사이트에서 HTTPS를 사용하려면 CA(인증 기관)에서 인증서(파일 유형)를 가져와야 합니다.

letsencrypt.org

certbot.eff.org/

 

Certbot

Different Internet services are distinguished by using different TCP port numbers. Unencrypted HTTP normally uses TCP port 80, while encrypted HTTPS normally uses TCP port 443. To use certbot –webroot, certbot –apache, or certbot –nginx, you should h

certbot.eff.org

Let's Encrypt 는 무료로 SSL 인증서를 발급해 주는 대신 갱긴 주기가 짧다고 합니다.

Certbot 설치

brew install certbot

 

letsencrypt 별도 설치가 필요할 줄 알았는데 certbot 을 설치하고 난 후에는 설치가 필요 없는 듯 합니다.

> brew install letsencrypt
Warning: certbot 1.10.1 is already installed and up-to-date
To reinstall 1.10.1, run `brew reinstall certbot`

certbot.eff.org/lets-encrypt/osx-other.html

 

Certbot - Osx Other

a project of the Electronic Frontier Foundation certbot instructions To use Certbot, you'll need... comfort with the command line command line ...and an HTTP website HTTP website that is already online already online with an open port 80 port 80 ...which i

certbot.eff.org

OSX 에서 설치 방법은 홈페이지에 설명되어 있습니다. 여기서는 수동으로 인증서 발급 진행을 해 줍니다.

sudo certbot certonly --manual

인증서 발급 진행 과정에서 email 주소와 domain 이름을 적으라고 나오는데 아래와 같이 iptime 에서 설정해 둔 내용을 가져다 사용했습니다.

중간 중간 약관동의 등 물어보는 항목들도 나옵니다.

발급에 실패 했습니다. 설명을 읽어보니 challenges 를 찾을 수 없다는데 세팅이 중간에 빠졌습니다. 바로 위쪽을 보면 점선으로 된 구문안에 제가 처리해 주었어야 할 내용이 적혀있습니다. 이래서 설명을 안읽고 대충 진행하면 안됩니다.

다시 인증 시도를 하면 구문안에 다른 키 값이 발급됩니다. 인증 할 때마다 랜덤한 값을 주는 듯 합니다. 또, 경로명과 안에 들어가 있어야 되는 데이터가 다릅니다. 각각 확인해서 맞는 경로에 파일을 생성하고 데이터를 추가하기 바랍니다. 최종적으로 URL 에서 해당 데이터가 출력되는 것을 확인한 뒤 Enter 를 눌러 진행하면 아래와 같이 성공했다는 메세지와 함께 생성된 인증서 경로를 알려줍니다.

참고로 성공 로그를 보면 2021년 4월 2일 만료가 됩니다. 오늘 1월 2일 생성했으니 생성일로 부터 딱 3달 보증해 주는 것 같습니다.

Apache 설정

이제 Apache 에 SSL 설정을 해 줍니다. 참고로 인증서 발급시 저처럼 메뉴얼이 아닌 --apache 구문을 넣으면 자동으로 Apache 설정을 해준다고 하네요.

진행한 Apache 버전은 2.4.46 입니다

우선 httpd.conf 파일을 열어 설정해 줍니다. 아래 적힌 설정들이 주석처리가 되어 있다면 주석을 제거해 주고 수정이 필요한 내용은 수정해 주면 됩니다. ServerAdmin 과 ServerName 만 인증서 발급시 입력한 값과 맞춰 주시고 나머지는 주석만 제거하면 됩니다.

LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
LoadModule ssl_module libexec/apache2/mod_ssl.so
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
...
ServerAdmin {myAdmin}
ServerName {myServerName}
...
# Virtual hosts
Include /private/etc/apache2/extra/httpd-vhosts.conf
...
# Secure (SSL/TLS) connections
Include /private/etc/apache2/extra/httpd-ssl.conf

 

extra/httpd-ssl.conf 파일을 열어 SSL 관련 설정을 해 줍니다.

...
DocumentRoot "/Library/WebServer/Documents"
ServerName {myServerName}:443
ServerAdmin {myAdmin}
ErrorLog "/private/var/log/apache2/error_log"
TransferLog "/private/var/log/apache2/access_log"
...
SSLCertificateFile "/etc/letsencrypt/live/{myServerName}/fullchain.pem"
SSLCertificateKeyFile "/etc/letsencrypt/live/{myServerName}/privkey.pem"
...

나머지는 certbot 에서 생성해준 options-ssl-apache.conf 파일을 참고해 수정해 줍니다. 맨 아래 LogFormat 이란 값은 매칭되는게 없어 보여 적용하지 않았습니다. options-ssl-apache.conf 파일은 인증서가 있는 letsencrypt 경로 안에 있습니다.

# This file contains important security parameters. If you modify this file
# manually, Certbot will be unable to automatically provide future security
# updates. Instead, Certbot will print and log an error message with a path to
# the up-to-date file that you will need to refer to when manually updating
# this file.

SSLEngine on

# Intermediate configuration, tweak to your needs
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder     off

SSLOptions +StrictRequire

# Add vhost name to log entries:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common

extra/httpd-vhosts.conf 파일을 수정해 Http 접속을 시도 하면 자동으로 Https 로 접속되게 설정해 줍니다.

<VirtualHost *:80>
    ServerAdmin chanuklee0227@gmail.com
    DocumentRoot "/Library/WebServer/Documents"
    ServerName chanuklee0227.iptime.org
    ErrorLog "/private/var/log/apache2/chanuklee0227.iptime.org-error_log"
    CustomLog "/private/var/log/apache2/chanuklee0227.iptime.org-access_log" common
    RewriteEngine on
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

 

마지막으로 iptime 의 포트 포워딩 설정에 Port 값이 80 만 설정되어 있다면 외/내부 Port 모두 80~443 허용되게 해야 합니다.

테스트

이제 웹으로 접속 해보면 Https 로 연결이 되는걸 확인할 수 있습니다. Https 연결이 되었는지 확인하는 방법은 주소 표시줄에 자물쇠 표시를 확인하고 눌러보면 아래와 같이 확인 가능합니다.

SSL 인증 갱신 자동화

마지막으로 SSL 인증 갱신을 자동화 해 줍니다. 홈페이지에 친절하게 Python 코드를 작성해 두고 복붙해 쓰면 되도록 안내 해 주고 있습니다. Cron 이란 것을 사용했는데 나중에 시간될 때 좀 더 자세히 알아보면 좋을 것 같습니다.

echo "0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null

certbot.eff.org/lets-encrypt/osx-other.html

 

Certbot - Osx Other

a project of the Electronic Frontier Foundation certbot instructions To use Certbot, you'll need... comfort with the command line command line ...and an HTTP website HTTP website that is already online already online with an open port 80 port 80 ...which i

certbot.eff.org

www.letmecompile.com/scheduler-cron-tutorial/

 

작업 스케쥴러 크론(Cron) 간단 사용법

unix 계열 운영체제 (linux, MacOS 포함)를 사용하다보면 시간대별로 반복되는 작업들을 수행해야 하는 경우가 매우 자주 있다. 이때 작업들의 스케쥴링을 위해서 application을 데몬처럼 실행시켜두고

www.letmecompile.com

반응형

댓글