기존에 쓰던 인증서 스크립트가 정상작동하지 않아서 좀 더 편하게 인증서 갱신할 수 있는지 찾아봤더니 acme.sh라는 let's encrypt 인증서 자동 갱신 도구를 누군가 만들어뒀다.
(개꿀)
먼저, 아래와 같은 명령어를 입력해서 acme.sh를 설치하자.
curl https://get.acme.sh | sh
설치가 완료되었다면 bash: . ~/.bashrc
, zsh: . ~/.zshrc
입력한 이후, acme.sh를 입력하면 다음과 같이 help 가 나오면 된다.
위와 같이 정상적으로 나온다면, 인증서를 생성해야 한다. 하지만 그전에 먼저 mkdir -p /etc/nginx/ssl
와 같이 nginx폴더 안에 ssl 폴더를 생성하자.
위와 같이 ssl 폴더를 생성하면, 아래의 명령어를 입력해서 dns TXT 레코드에 등록해야할 값이 나온다.
acme.sh --renew --issue --dns --force -d [domain1] -d [domain2] --yes-I-know-dns-manual-mode-enough-go-ahead-please
도메인 한개만 얻고 싶을 경우, -d 옵션을 하나만 주면 된다.
이걸 도메인 서버에 등록을 해야하니 위 그림에서 나온 값을 _acme-challenge에 아래와 같이 TXT값을 설정해주자.
위와 같이 설정을 했다면, 모든 준비가 끝났다. 아래의 명령어를 입력해서 인증서를 생성하는지 확인하자
acme.sh --renew --dns --force -d [domain1] -d [domain2] --yes-I-know-dns-manual-mode-enough-go-ahead-please
정상적으로 인증서를 생성됐다면,~/.acme.sh/[domain]/
경로에 생성된다.
이제 인증서를 설치해야하는데, 이전에 생성했던 /etc/nginx/ssl 폴더로 복사를 진행해야한다. 복사하는 명령어는 다음과 같이 입력하면 된다.
acme.sh --installcert -d "[domain]" \
--key-file /etc/nginx/ssl/[domain].key \
--fullchain-file /etc/nginx/ssl/[domain]-fullchain.cer \
--reloadcmd "service nginx force-reload"
위와 같이 입력하면 해당 폴더에 복사가 진행되므로, 인증서 관련 작업은 모두 끝났다.
이제부터는 이 인증서를 이용해서 웹 서버에 설정을 해줘야하는데, 아래와 같이 설정해주면 된다.
# dhparam.pem 생성
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
# /etc/nginx/sites-enabled/[domain]에 아래의 설정 추가
server {
...
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/[domain]-fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/[domain].key;
include /etc/nginx/ssl/options-ssl-nginx.conf;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
...
}
# vi /etc/nginx/ssl/options-ssl-nginx.conf 파일 생성
ssl_session_cache shared:le_nginx_SSL:10m;
ssl_session_timeout 1440m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_ciphers "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:ECDHE-RSA-AES128-SHA";
위와 같이 모두 설정한 이후에, service nginx restart
를 실행해서 정상적으로 재시작되는지 확인하면 된다.
이제, 갱신을 자동화해야하므로 아래와 같이 스크립트를 만들어 실행하면 모든 인증서를 처리할 수 있도록 하면 된다.
마지막으로 crontab을 설정할 차례다. 아래의 설정을 crontab -e를 통해 저장하면 된다.
24 0 * * * /[renew.sh 경로]/renew.sh
'자료' 카테고리의 다른 글
DDos + Syn flooding firewall (0) | 2019.10.03 |
---|---|
socat daemonize (0) | 2019.07.22 |
[Conoha/VPS] KernelPanic 복구 (0) | 2018.12.16 |
[Conoha] letsencrypt wildcard 인증서 발급 (0) | 2018.12.09 |
Profile (0) | 2018.10.25 |