0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[SSL] Let'sEncryptでSSL化する | Nginx

Posted at

やりたいこと

  • Let'sEncryptを利用して、無料でSSLサーバ証明書を発行しSSL化する
  • CRONを設定して、サーバ証明書を自動更新する

サーバ証明書

  • ウェブサイトで HTTPS (SSL/TLS) を有効にするために必要なデジタル証明書

Let'sEncryptについて

  • ドメイン名を持っている人なら、誰でも無料でサーバ証明書を発行してくれる認証局
  • 有効期限は90日間

Certbotについて

  • 証明書を発行するための、クライアントソフト
  • 設定も自動で編集してくれる

環境

  • EC2
  • nginx/1.20.0
  • certbot 1.11.0
  • Nginxインストール済み、DNS設定済み

1. EPELパッケージをインストール

Certbotを利用するにあたりEPELをダウンロードする必要がある。
EPEL(Extra Packages for Enterprise Linux)

$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

2. インストールしたEPELを有効化

$ sudo yum-config-manager --enable epel*

3. Certbotをインストール

nginxのSSL化に必要なパッケージもインストール

$ sudo yum -y install certbot python2-certbot-nginx

$ sudo yum -y install certbot (普通にインストール)

4. サーバ証明書を発行

下記のコマンドで、証明書を発行してNginxの設定も自動で編集してくれる

$ sudo certbot --nginx

※ 証明書のみ発行したい場合
$ sudo certbot certonly --nginx

5.HTTPSが有効になったか確認

(1) Nginxの設定ファイル

$ view /etc/nginx/conf.d/hostname.conf

HTTPS通信に必要な設定が追記されている。

hostname.conf
    + listen 443 ssl; 
    + ssl_certificate /etc/letsencrypt/live/hostname.net/fullchain.pem;
    + ssl_certificate_key /etc/letsencrypt/live/hostname.net/privkey.pem;
    + include /etc/letsencrypt/options-ssl-nginx.conf;
    + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 
    ...
    + server {
    + if ($host = hostname.net) {
    +    return 301 https://$host$request_uri;
    + } # managed by Certbot

    + listen 80;
    + server_name hostname.net;
    + return 404; # managed by Certbot

(2) Let'sEncryptから発行された証明書の有効期限を確認

fullchain.pem
$ sudo openssl x509 -in /etc/letsencrypt/live/hostname.net/fullchain.pem -noout -dates

証明書の有効期限は、90日後になっている。

出力結果
notBefore=Dec 15 02:21:26 2021 GMT #発行日  12月15日 
notAfter=Mar 15 02:21:25 2022 GMT  #有効期限 3月15日

(3) サイトを確認
証明書が適用されている
SS 6.png

6.証明書を自動更新設定

Let'sEncryptの有効期限は3ヶ月のため、証明書を
自動更新されるようにCRONを設定する
CRON = 指定した時間に、指定したプログラムを動かしてくれる仕組み

* * * * *
曜日

毎日、12:00に$ certbot renew -qを実行
( -q | --quiet ) = エラーを除くすべての出力を行なわない。(エラーメッセージのみを出力)

$ 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

設定を反映させるため再起動

$ sudo systemctl restart crond

crontabが編集されているか確認

$ sudo cat /etc/crontab
実行結果
0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q

手動で更新する場合

証明書を更新する

$ sudo certbot renew

※ 証明書の更新は、有効期限から30日切っていないと更新できない

30日切っていなくても、強制的に更新する場合は
$ sudo certbot renew --force-renew で可能

Let'sEncrypt証明書の制限について

  • 登録ドメインごとの証明書数の制限は、1週間に50個まで。

公式サイト{www.example.com の場合、登録ドメインは example.com です。 new.blog.example.co.uk の場合、登録ドメインは example.co.uk になります。}

  • 検証の失敗は、1時間につき5回まで。

公式サイト{検証の失敗は、1アカウントごと、1ホスト名ごと、1時間毎に、5回までに制限されています。 この制限はステージング環境では緩和されているため、接続の問題をデバッグする場合には、こちらを使ってください}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?