運営者プロフィール

Let’s Encryptの証明書を手動で更新してみてハマったこと。

ども。あいしんくいっと( @ithinkitnet)です。

無料でSSL証明書を発行してくれるLet’s Encrypt。
私も愛用させてもらってるのですが、Let’s Encryptからこんなメールが届きました。

どうやら、メールの内容的には「あと19日で期限が切れるから証明書更新しといてね~」ってことらしい。

SSL証明書の期限切れとか、笑えない。。。
というワケで、今回は手動で更新してみることにします。
まぁ、自動で更新されるように設定しとけよ!って話なんですけどw

SSL証明書の確認

事前にSSL証明書の期限を確認。

今日が7/9だから、通知通りにあと19日で期限を迎えるみたい。
いやー、自動で更新しとくようにしとかないと面倒だな。

でも、期限切れをメール通知してくれるから、手動で更新する運用でも良いのかも知れない。。

Let’s Encryptの証明書を手動で更新する方法

サーバに接続して以下のコマンドを実行します。
コマンドオプションに「–dry-run 」を付けて念のためテストしておきます。

# /opt/certbot/certbot-auto renew --force-renewal --dry-run

※certbot-autoコマンドは環境によってパスが異なるので注意してください

ん~。何かエラー出てるけど大丈夫かな?

httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName
(98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
ほう。nginx停止しないとエラーになる模様・・・。
というワケでnginx停止。

# /etc/init.d/nginx stop
Stopping nginx: [ OK ]

再度、更新のコマンドを実行してみると、

# /opt/certbot/certbot-auto renew --dry-run
/root/.local/share/letsencrypt/lib/python2.6/site-packages/cryptography/__init__.py:26: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of cryptography will drop support for Python 2.6
DeprecationWarning
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/i-think-it.net.conf
-------------------------------------------------------------------------------
Cert is due for renewal, auto-renewing...
Renewing an existing certificate
Performing the following challenges:
tls-sni-01 challenge for i-think-it.net
Encountered vhost ambiguity but unable to ask for user guidance in non-interactive mode. Currently Certbot needs each vhost to be in its own conf file, and may need vhosts to be explicitly labelled with ServerName or ServerAlias directives.
Falling back to default vhost *:443...
Waiting for verification...
Cleaning up challenges

-------------------------------------------------------------------------------
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/i-think-it.net/fullchain.pem
-------------------------------------------------------------------------------
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/i-think-it.net/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates above have not been saved.)

相変わらずエラーは出てるけど、気になるほどではなくなった。
なので、いざ更新。

# /opt/certbot/certbot-auto renew --force-renewal
/root/.local/share/letsencrypt/lib/python2.6/site-packages/cryptography/__init__.py:26: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of cryptography will drop support for Python 2.6
DeprecationWarning
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/i-think-it.net.conf
-------------------------------------------------------------------------------
Renewing an existing certificate
Performing the following challenges:
tls-sni-01 challenge for i-think-it.net
Encountered vhost ambiguity but unable to ask for user guidance in non-interactive mode. Currently Certbot needs each vhost to be in its own conf file, and may need vhosts to be explicitly labelled with ServerName or ServerAlias directives.
Falling back to default vhost *:443...
Waiting for verification...
Cleaning up challenges

-------------------------------------------------------------------------------
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/i-think-it.net/fullchain.pem
-------------------------------------------------------------------------------

Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/i-think-it.net/fullchain.pem (success)

「Congratulations, all renewals succeeded. 」って出力されてるし、SSL証明書の更新は上手く行った模様。

で、nginxを起動して終わり。
と行きたかったが、そう上手く行かず。

上記の更新コマンドを実行すると、何故かapacheが勝手に起動するらしい。
(apache使ってないのに余計なことを・・・)

なので当然、nginxを起動しようとするとエラーとなる。

# /etc/init.d/nginx start
Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] still could not bind()
[FAILED]

そりゃ、apacheが80番ポート使って起動してるし無理だわ〜。

なので、apacheを停止し、

# /etc/init.d/httpd stop
Stopping httpd: [ OK ]

nginxを起動。

# /etc/init.d/nginx start
Starting nginx: [ OK ]

nginxが無事に起動。
ふう。焦った、焦った。

SSL証明書の期限が延長されたことを確認

更新作業が完了したので、ブラウザからSSL証明書の期限が延長されたことを確認すると、、、

あれ?SSL証明書の有効期間が変わってない・・・。
一体、何故だ???

SSL証明書を置き換える必要があった・・・

よくよく考えると、SSL証明書の配置場所を変えてたのを思い出しまして。
そのため、新規で作成されたSSL証明書を所定の場所に配置し直す必要がありました。
この辺りは環境にもよるかも知れないですけどね。

~nginxの設定ファイル抜粋~

# サーバ証明書(サーバ証明書に中間CA証明書を連結したもの)
ssl_certificate /etc/nginx/conf.d/cert2.pem;
# # 秘密鍵
ssl_certificate_key /etc/nginx/conf.d/privkey2.pem;

そして、更新されたSSL証明書を所定の位置に配置してnginxをリロードすると、ようやくSSL証明書の期限が延長されたことが確認出来ました。

はぁ〜。ヤレヤレだぜ。。。

WEBサーバがapacheかつ、SSL証明書の配置場所を変えてないのであれば、今回の私のようにハマることはないと思いますが、webサーバにnginx使ってて、SSL証明書の配置場所を変更している場合は注意しましょう・・・。

ithinkit

SSL証明書の自動更新理作るの面倒だな〜orz

以上、あいしんくいっとでした( ..)φメモメモ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)