Let’s Encryptが発行してくれるサーバー証明書は、有効期限が3ヶ月間と短いものです。
わりと頻繁に更新作業を行わなければいけませんが、サーバー証明書取得時と同じく簡単に行う事が出来ます。
今回はサーバー証明書の更新作業を行ってみます。
前回、Let’s Encrypt サーバー証明書取得時の記事はこちら
無料でサーバー証明書を取得してウェブサイトを暗号化しよう!Let’s Encrypt!
Let’s Encryptからの通知
Let’s Encryptから取得したサーバー証明書の有効期限の終わりに近づいてくると、以下の様なメールで通知してくれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
From: Let's Encrypt Expiry Bot <expiry@letsencrypt.org> Subject: Let's Encrypt certificate expiration notice To: <webmaster@hogehoge-k.com> Hello, Your certificate (or certificates) for the names listed below will expire in 19 days (on 12 Jan 17 17:37 +0000). Please make sure to renew your certificate before then, or visitors to your website will encounter errors. blog.hogehoge-k.com hogehoge-k.com www.hogehoge-k.com For any questions or support, please visit https://community.letsencrypt.org/. Unfortunately, we can't provide support by email. If you are receiving this email in error, unsubscribe at http://mandrillapp.com/track/unsub.php?u=~~~~~~~~~~~~~ (HTTP link, we know. We're working on it!) Regards, The Let's Encrypt Team |
親切です!\(^o^)/
取得時に登録するメールアドレスは、間違いなくちゃんと受信可能なアドレスを登録しておきましょう。
更新時の認証処理
Let’s Encryptのサーバー証明書更新時にも新規取得時と同じく「ドメイン使用権者の認証」処理が行われる様です。
新規取得時に「--standalone
」オプションを指定した場合は、取得時と同様にウェブサーバーが起動中の場合は一時的に停止させておく必要があります。
ウェブサーバーを起動したまま更新処理を行うと以下の様なエラーが発生します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@web7 ~]# certbot renew ------------------------------------------------------------------------------- Processing /etc/letsencrypt/renewal/www.hogehoge-k.com.conf ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- The program httpd (process ID 31527) is already listening on TCP port 80. This will prevent us from binding to that port. Please stop the httpd program temporarily and then try again. For automated renewal, you may want to use a script that stops and starts your webserver. You can find an example at https://letsencrypt.org/howitworks/#writing-your-own-renewal-script. Alternatively you can use the webroot plugin to renew without needing to stop and start your webserver. ------------------------------------------------------------------------------- 2016-12-24 18:25:33,094:WARNING:certbot.renewal:Attempting to renew cert from /etc/letsencrypt/renewal/www.hogehoge-k.com.conf produced an unexpected error: At least one of the (possibly) required ports is already taken.. Skipping. All renewal attempts failed. The following certs could not be renewed: /etc/letsencrypt/live/www.hogehoge-k.com/fullchain.pem (failure) 1 renew failure(s), 0 parse failure(s) [root@web7 ~]# |
この場合はウェブサーバーを停止させ、ポート80を未使用の状態にしましょう。
新規取得時と同じ手順、環境を作ればOKという事です。
更新コマンドの実行
「certbot renew
」のコマンドで取得済の全てのサーバー証明書の更新を行えます。
複数のサーバー証明書を取得している場合、指定した証明書のみ更新したい場合があると思いますが、
現時点で、renewオプションでは指定した証明書のみ更新という事は対応出来ない様です。
これを行いたい場合はcertonlyオプションを指定して同じ内容で取得し直す事になる様です。
今回は renewオプションでおまかせ更新をやってみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[root@web7 ~]# certbot renew ------------------------------------------------------------------------------- Processing /etc/letsencrypt/renewal/www.hogehoge-k.com.conf ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- new certificate deployed without reload, fullchain is /etc/letsencrypt/live/www.hogehoge-k.com/fullchain.pem ------------------------------------------------------------------------------- Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/www.hogehoge-k.com/fullchain.pem (success) [root@web7 ~]# |
成功しました!\(^o^)/
証明書の確認
関係するファイルは /etc/letsencrypt/ 下に格納されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@web7 ~]# LANG=C tree /etc/letsencrypt/ /etc/letsencrypt/ |-- accounts |-- archive | `-- www.hogehoge-k.com | |-- cert1.pem | |-- cert2.pem | |-- chain1.pem | |-- chain2.pem | |-- fullchain1.pem | |-- fullchain2.pem | |-- privkey1.pem | `-- privkey2.pem |-- live | `-- www.hogehoge-k.com | |-- cert.pem -> ../../archive/www.hogehoge-k.com/cert2.pem | |-- chain.pem -> ../../archive/www.hogehoge-k.com/chain2.pem | |-- fullchain.pem -> ../../archive/www.hogehoge-k.com/fullchain2.pem | `-- privkey.pem -> ../../archive/www.hogehoge-k.com/privkey2.pem `-- renewal `-- www.hogehoge-k.com.conf |
/etc/letsencrypt/archive/<ホスト名>/
下には取得した証明書や秘密鍵が格納されています。
ファイル名に数字が付いているのは、履歴を表すものです。初回に取得したものは「1」、今回取得したものは「2」という具合です。
/etc/letsencrypt/live/<ホスト名>/
下には最新のファイルへのシンボリックリンクが作成されます。
今回取得(更新)した「2」番のファイルへそれぞれシンボリックリンクが張られているのが解ります。
ウェブサーバーの設定にはこのシンボリックリンクのパスを設定しておくと、常に最新の設定ファイルを利用する様に設定できるという事です。
証明書の中身も確認しておきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
[root@web7 ~]# openssl x509 -text -noout -in /etc/letsencrypt/live/www.hogehoge-k.com/cert.pem Certificate: Data: Version: 3 (0x2) Serial Number: 03:fc:64:3a:3a:53:2d:12:fb:4e:df:bf:f1:ce:fa:43:ae:44 Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3 Validity Not Before: Dec 26 15:02:00 2016 GMT Not After : Mar 26 15:02:00 2017 GMT Subject: CN=www.hogehoge-k.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:ae:63:55:98:91:7b:23:95:6d:c0:64:1d:03:12: 7e:be:99:e7:71:60:3c:fc:43:49:3b:84:5e:bc:2e: 28:f8:58:ed:b3:2f:1f:20:a8:6a:0a:85:77:81:71: 7d:09:56:b8:28:c6:1a:f4:6a:67:41:69:ac:c1:af: 64:06:25:b0:19:38:16:cb:ea:a0:5c:ef:81:88:35: 05:fa:a8:6f:6f:a4:54:18:bb:da:e6:21:01:38:3f: 6b:27:5a:f6:ab:bb:0e:1d:4f:fe:cc:00:49:84:14: b1:30:f7:6f:87:e2:85:b7:f0:5b:6c:9d:25:2a:dd: b2:68:ca:07:b0:fe:23:a5:fc:9a:ac:e8:5a:1b:aa: 17:1e:89:50:f3:1d:67:71:c4:7b:ad:ba:3b:77:cc: fa:6b:67:4d:68:18:ef:85:49:e9:bc:0d:fb:f2:a3: cf:19:8d:30:e7:f0:11:b8:65:fe:bf:da:9c:eb:d5: fc:01:a7:04:a7:b3:c7:d9:d0:52:35:ca:8a:e7:35: e4:2b:a7:df:4e:34:52:05:9f:6b:32:13:4f:7e:9b: ac:dc:1c:6a:1b:e0:f3:4b:45:2c:cf:45:d1:0f:bd: 15:cb:96:8d:be:87:de:65:2f:82:27:82:e2:e1:29: 2f:dc:43:38:3d:f7:a1:f0:82:8c:0f:e5:0a:2f:b7: 08:97 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: FD:68:36:FA:88:7C:4F:1B:CC:28:CE:CA:02:77:17:1A:1B:0F:3A:4A X509v3 Authority Key Identifier: keyid:A8:4A:6A:63:04:7D:DD:BA:E6:D1:39:B7:A6:45:65:EF:F3:A8:EC:A1 Authority Information Access: OCSP - URI:http://ocsp.int-x3.letsencrypt.org/ CA Issuers - URI:http://cert.int-x3.letsencrypt.org/ X509v3 Subject Alternative Name: DNS:blog.hogehoge-k.com, DNS:hogehoge-k.com, DNS:www.hogehoge-k.com X509v3 Certificate Policies: Policy: 2.23.140.1.2.1 Policy: 1.3.6.1.4.1.44947.1.1.1 CPS: http://cps.letsencrypt.org User Notice: Explicit Text: This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/ Signature Algorithm: sha256WithRSAEncryption 84:45:99:5a:63:95:c4:81:2d:63:0a:3d:21:fd:48:9d:50:fb: 99:a5:c2:16:6b:d8:f6:31:bb:4f:f7:ba:ae:2c:53:fc:43:3e: 34:64:4e:53:0f:ff:7a:00:90:d9:a2:b0:ea:5e:bd:4d:bc:29: 4d:09:0e:4d:d9:92:d7:b2:7e:5e:63:71:51:54:81:7b:44:50: b3:10:b2:5f:91:3e:0a:04:9b:28:14:62:59:8c:d7:2a:62:82: 47:2d:0c:71:de:a8:6d:11:b9:aa:69:88:49:23:da:40:a3:57: bd:0c:27:1f:58:4d:ef:3c:55:13:02:5d:e9:fb:71:0b:90:81: c0:77:bc:8e:7c:a6:e8:54:4a:87:a5:b3:5c:ff:4b:0e:b9:20: a8:ca:87:80:0e:c9:50:c8:a0:fe:e1:a5:fe:c5:78:0b:78:c4: b2:91:48:f9:30:bb:28:60:4f:73:0f:3d:7f:2d:f8:18:87:c8: e8:8b:3c:e6:93:02:91:3e:68:f9:35:8d:4a:47:99:a2:6f:87: 98:16:9c:2a:21:10:dc:29:e5:cc:9c:a9:5e:d5:5f:88:42:b1: ef:0a:3f:1c:7e:14:aa:b7:cc:27:19:29:d3:80:7c:16:39:3f: e0:8d:be:d7:a8:ef:0a:27:8d:07:5c:93:fd:d6:b6:e9:de:53: 21:3f:8c:6a [root@web7 ~]# |
有効期限が更新されていればOKです。
certbotコマンドを使用した Let’s Encryptのサーバー証明書の更新は、新規取得時と同じくとても簡単に行なえます。
これなら3ヶ月毎に作業が発生しても苦ではないですね!\(^o^)/
自動更新について
Let’s Encryptの情報を検索しますと、サーバー証明書の自動更新の設定についての解説を多く目にします。
内容はCRONへの設定の仕方というものです。
私の環境では以下の2点の理由で自動更新は行わない事にしました。
- Let’s Encryptサーバーの負荷を考慮
Let’s Encryptのサービスは無料で提供して頂いているものです。スポンサーは付いているものの潤沢な資金の元で運用されているプロジェクトでは無いでしょう。
プロジェクトが安定してずっと存続可能な様に、そして私達がこのプロジェクトの恩恵をずっと受けられる様に、プロジェクトの負担は出来るだけ少なくしてあげたいものです。
これからもLet’s Encryptの利用者は増え続けると思いますが、サーバー証明書取得時や更新時に発生するLet’s Encryptサーバーへの接続が増えれば、それに伴いサーバーの増強も必要になってきます。
できるだけLet’s Encryptサーバーの負荷を減らしてあげたい為、当方はCRONから自動更新処理を起動(Let’s Encryptサーバーへ問い合わせが発生)させる様な事は致しません。
CRONに設定するな、とは言いませんが、出来るだけ長い間隔で設定したいものです。1週間に一度程度走る様にするのが良いのではないでしょうか。 - 当方のネットワーク構成上の理由
当方のネットワークは、ローカルIPを振ったDMZにいくつかのウェブサーバー機(OSやハード(物理or仮想)などさまざま)があり、インターネットからのアクセスはゲートウェイ機にリバースプロキシーとして設定したウェブサーバーからドメイン別に割り振ってアクセスさせる、という構成になっています。
certbotコマンドを実行してLet’s Encryptのサーバー証明書取得を行っているマシンは、このDMZに接続しているマシンで、そのままでは外部から直接ポート80や443で接続を受ける事が出来ません。
作業を行う際には一時的にゲートウェイ機にポートフォワードの設定を行って、外部(Let’s Encryptサーバー)からの接続を作業するマシンに飛ばしてくる事で対応しています。
更新処理を自動化出来ない訳ではないですが、複数のマシンの設定を変更する必要があり、また他のサーバーの広範囲へ影響する為、慎重を期して手作業で行う事にします。
Leave A Comment