更新日:2016年11月09日

0.環境

[CentOS] 6.4 (64bit版カーネル)
[Apache] 2.2.15
[Firefox] 44.0.2

1.期限通知

  • (文中【】はマスク情報)

  • 年末に設定した Let’s Encrypt のSSL証明書の期限が迫り、下記のお知らせメールが届きました。

    Let's Encrypt certificate expiration notice
    
    Hello,
    
    Your certificate (or certificates) for the names listed below will expire in 17 days (on 04 Mar 16 17:44 +0000). Please make sure to renew your certificate before then, or visitors to your website will encounter errors.
    
    【以下省略】
    
  • ブラウザで有効期限を確認するとそろそろ切れそうです。

    ブラウザ(Firefox)のアドレスバーの鍵マークをクリックし、[ > ] - [詳細を表示] - [セキュリティ] - [証明書を表示] - [有効期限]

    SSL証明書更新前

2.更新作業

  • 公式マニュアルにそってやってみました。(参考ページ①)

    letsencrypt をインストールしたディレクトリに移動し、下記のコマンドを実行。(letsencrypt と letsencrypt-auto コマンドは互換性があるとのことなので、初回セットアップで使ったletsencrypt-autoを指定)

    (ディレクトリを忘れた場合はlocate letsencrypt-autoなどで確認)

    # cd /usr/local/src/letsencrypt/
    #
    # ./letsencrypt-auto renew
    

    1分ほど待って下記メッセージが表示されました。成功したようです。

    # ./letsencrypt-auto renew
    Updating letsencrypt and virtual environment dependencies...You are using pip version 7.1.2, however version 8.0.2 is available.
    You should consider upgrading via the 'pip install --upgrade pip' command.
    ....
    Running with virtualenv: 【ディレクトリパス】 renew
    Processing 【ディレクトリパス】
    new certificate deployed without reload, fullchain is 【ディレクトリパス】/fullchain.pem
    
    Congratulations, all renewals succeeded. The following certs have been renewed:
    【ディレクトリパス】/fullchain.pem (success)
    

    (2016/05/14, 追記) 証明書の更新は正常終了しましたが、下記の警告が出ました。

    WARNING:certbot.cli:You are running with an old copy of letsencrypt-auto that does not receive updates, and is less reliable than more recent versions. We recommend upgrading to the latest certbot-auto script, or using native OS packages.
    

    letsencrypt-autoコマンドは古くなったようなので、次回から下記を使おうと思います。

    certbot-autoコマンドの準備はこちら

  • ブラウザをリロードしたり、再起動しても証明書の有効期限は変わらず…

    公式マニュアルにはありませんが、Webサーバーの再起動が必要なようです。

    (参考ページ②)

    # service httpd restart
    

    Webサーバーを再起動するとブラウザ側の有効期限も延長されました。

    SSL証明書更新後

  • (2016/08/06, 追記) そろそろ面倒になってきたので、証明書の更新をCronに設定しました。

    頻繁に更新するとエラーになるようなので、10日に1回の実行です。(参考ページ③)

    もし失敗していても、冒頭に載せた通知メールがLet’s Encryptから届くので、気付くことはできそうです。(【】内は読み替え)

    # SSL証明書更新。
    # Webサーバー再起動を伴うため、深夜に実行。
    0 3 */10 * * sh /【ユーザー】/bin/letsencrypt-renew.sh
    
  • shの内容はこちら。

  • (2016/08/22, 追記) 上記 renew.log を見たら更新が失敗していたので下記の対応を行いました。

    • 依存パッケージのインストールを求めるところで停止していたので、一度、手動で下記コマンドを実行。

      • 停止箇所

        Is this ok [y/N]: Exiting on user Command

      • 手動実行したコマンド

        /usr/local/src/certbot/certbot-auto renew

    • その際、「まだ期限ではないので更新をスキップしたよ」というメッセージが出ました。

      The following certs are not due for renewal yet:
        /etc/letsencrypt/live/【ドメイン名】/fullchain.pem (skipped)
      No renewals were attempted.
      

      強制的に更新するため、コマンドに –force-renew オプションを追加。(上記 gist にも反映済み)

    • 下記メッセージが表示され、cronからの実行も成功しました。

      Congratulations, all renewals succeeded.

    • また10日後くらいにちゃんと更新されているか見てみようと思います…

      (2016/09/04, 追記) ログとブラウザを確認したところ、証明書は更新されていました。

      これでしばらく放っておいても大丈夫そうです。

      # cat /var/log/letsencrypt/renew.log
              
       :
      (省略)
       :
      Congratulations, all renewals succeeded. The following certs have been renewed:
      /etc/letsencrypt/live/【ドメイン名】/fullchain.pem (success)
      
  • (2016/11/09, 追記) ブラウザ上で証明書の開始日がしばらく更新されていなかったので、上記 renew.log を見たところ、またもやエラーが出ていました…

    • エラー内容

      Dependencies Resolved
      
      ================================================================================
       Package Arch Version Repository Size
      ================================================================================
      Updating:
       openssl x86_64 1.0.1e-48.el6_8.3 updates 1.5 M
       openssl-devel x86_64 1.0.1e-48.el6_8.3 updates 1.2 M
      
      Transaction Summary
      ================================================================================
      Upgrade 2 Package(s)
      
      Total download size: 2.7 M
      Is this ok [y/N]: Exiting on user Command
      Could not install OS dependencies. Aborting bootstrap!
      Automated renewal failed
      
    • 何とか依存パッケージのインストール確認をスキップできないものかと調べていたら、コマンド集を見つけ、下記のオプションでうまくいきました。(参考ページ④)

      --non-interactive (上記 gist にも反映済み)

      ちなみに、同ページに --quiet は上記オプションも含む、と書かれていましたが、こちらはダメでした。

参考ページ