'certbot'에 해당되는 글 1건

반응형

기존에 쓰던 인증서 스크립트가 정상작동하지 않아서 좀 더 편하게 인증서 갱신할 수 있는지 찾아봤더니 acme.sh라는 let's encrypt 인증서 자동 갱신 도구를 누군가 만들어뒀다.

(개꿀)

먼저, 아래와 같은 명령어를 입력해서 acme.sh를 설치하자.

 

curl https://get.acme.sh | sh

 

설치가 완료되었다면 bash: . ~/.bashrc, zsh: . ~/.zshrc 입력한 이후, acme.sh를 입력하면 다음과 같이 help 가 나오면 된다.

acme.sh help

위와 같이 정상적으로 나온다면, 인증서를 생성해야 한다. 하지만 그전에 먼저 mkdir -p /etc/nginx/ssl와 같이 nginx폴더 안에 ssl 폴더를 생성하자.

mkdir 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 옵션을 하나만 주면 된다.

dns challenge TXT value

이걸 도메인 서버에 등록을 해야하니 위 그림에서 나온 값을 _acme-challenge에 아래와 같이 TXT값을 설정해주자.

TXT value 설정

위와 같이 설정을 했다면, 모든 준비가 끝났다. 아래의 명령어를 입력해서 인증서를 생성하는지 확인하자

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
블로그 이미지

KuroNeko_

KuroNeko

,