웹 사이트에 SSL 도입 (CentOS7 + nginx1.15 + Let's Encrypt)

개요



CentOS7+nginx1.15+Let's Encrypt를 이용하여 웹사이트에 SSL을 도입한다.

※Let's Encrypt란?
SSL 서버 증명서(이하, 증명서라고 기재)를 무상으로 취득·갱신할 수 있는 서비스.

대상 환경



OS: CentOS7.5
웹: nginx1.15

전제


  • SSL화하고 싶은 도메인의 이름 해석을 할 수 있는 것.
  • SSL화하려는 도메인에서 웹 서버에 액세스할 수 있어야 합니다.
  • 80번 & 443번 포트가 개방되어 있어 외부로부터 액세스 할 수 있는 것.
  • ポート開放
    # firewall-cmd --zone=public --add-service=http --permanent
    # firewall-cmd --zone=public --add-service=https --permanent
    # firewall-cmd --reload
    
    ポート開放確認
    # firewall-cmd --list-all
    
    リストの中に「http」「https」があれば、ポート開放されている。
    services: ssh http https
    

    절차



    Let's Encrypt를 설치합니다.


    任意のディレクトリに移動。
    # cd /usr/local
    
    Let's Encryptをcloneする。
    # git clone https://github.com/certbot/certbot
    
    cloneしたディレクトリに移動する。
    # cd letsencrypt
    
    インストール
    # ./letsencrypt --help
    

    인증서를 발행한다.


    nginxを停止する。
    # systemctl stop nginx
    
    証明書を発行する。
    ドメイン名やメールアドレスの入力、規約の同意を求められるので入力する。
    ※スタンドアローンモードで証明証を発行する。
    # ./certbot-auto certonly --standalone -t
    
    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    Plugins selected: Authenticator standalone, Installer None
    Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
    to cancel): xxxxxxxxxxxxxxxx.com
    
    ~~
    
    Obtaining a new certificate
    Performing the following challenges:
    http-01 challenge for xxxxxxxxxxxxxxxx.com
    Waiting for verification...
    Cleaning up challenges
    
    以下のように「Congratulations!」と表示されれば証明書の発行は完了。
    IMPORTANT NOTES:
     - Congratulations! Your certificate and chain have been saved at:
    
    ~~
    

    nginx를 설정합니다.



    conf 파일에 설정을 추가합니다.



    /etc/nginx/conf.d/default.conf
    server {
      ~~
      listen 443 ssl;
      ssl_certificate     /etc/letsencrypt/live/xxxxxxxxxxxxxxxx.com/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/xxxxxxxxxxxxxxxx.com/privkey.pem;
      ~~
    }
    

    동작 확인



    nginx를 시작합니다.


    # systemctl start nginx
    

    브라우저에서 표시를 확인합니다.



    SSL 도입 전


    SSL 도입 후


    인증서 자동 업데이트



    cron에서 자동 업데이트 설정



    Let's Encrypt에서 얻은 인증서는 만기일이 90일이므로 정기적으로 업데이트 처리를 수행해야 합니다.
    ※cron 설정의 순서는 생략합니다.
    # 毎月1日の1時に更新処理を実行する。
    0 1 1 * * root systemctl stop nginx && cd /usr/local/certbot/ && ./certbot-auto renew && systemctl start nginx
    

    요약



    검색엔진이나 외부 API 연계에서 SSL(HTTPS)이 필수가 되고 있기 때문에, 이 근처의 조작에는 익숙해져 두고 싶네요.

    참고



    Let's Encrypt 포털 포털

    좋은 웹페이지 즐겨찾기