CentOSで無料SSL証明書「Let’s Encrypt」を導入・自動更新する方法

以前、XREAに無料SSL証明書を導入してみましたという記事を投稿したのですが、思いのほか需要があるネタらしく、当サイトでは和楽一筋関連の次にアクセス数が多い記事になっています。

Webサイトをhttps化していない場合、セキュリティが不十分であるだけでなく、ブラウザに警告表示が出たり、Googleなどの検索エンジンにランクを下げられるという話もあり、今後は個人サイトであってもhttps化(SSLサーバ証明書の導入)が重要になってきます。
昔は有料のSSL証明書しかなく、個人が利用するには敷居が高いものでしたが、今は無料のサービスがあります。

以前自分が自宅サーバに無料SSL証明書を入れた際、いろいろと苦労した点があったため、今回はLinuxのひとつであるCentOSに無料SSL証明書「Let’s Encrypt」をインストールして、証明書の自動更新設定まで実施する方法を備忘録としてまとめました。

目次

無料SSLサーバ証明書「Let’s Encrypt」とは?

Let’s Encryptは、非営利団体ISRG (Internet Security Research Group)が運営しているプロジェクトです。
SSL/TLSサーバ証明書の無料発行や、証明書の発行・設定・更新の自動化を通して、httpsなどの安全な通信の普及を目指しています。
2016年にサービスが始まったそうです。

英語の公式サイトはこちら。日本語だとLet’s Encrypt総合ポータルという非公式解説サイトに詳しい情報があります。

前提

今回の記事は、以下の前提でまとめています。

  • サーバのOSとして、CentOS 6系がインストール済
    • CentOS 7系の場合、少しコマンドが変わります
  • Webサーバソフトとして、nginxがインストール済
    • Apacheでも、ほぼ同じ手順です
  • ウェブサイトが公開済で、インターネットからサーバにhttp/httpsアクセスできること
    • ドメインの所有者であることを認証する際、http/httpsアクセスが必要になります
    • ルータやファイアウォールのポート設定に注意
  • 独自ドメインを保有していること

SSLサーバ証明書の導入

まずは、サイトにSSLサーバ証明書を導入していきます。

(1)ツールのダウンロード・インストール

  1. サーバにログインして、rootユーザになります。
  2. 関連ツールがEPELリポジトリに入っているため、インストールします。
  3. Let’s Encryptでは、「Certbot」というクライアントソフトウェアを使って証明書の取得・更新を行います。
    Certbotをダウンロードして、実行権限を付与。
  4. Certbotを実行。

    これを実行すると、パッケージ管理システムyumによって関連ツールが自動でインストールされた後、設定画面に移ります。
    しばらく待ちましょう。
    インストール時に確認を求められたら「y」を入力します。
  5. 「完了しました!」というメッセージのあと、設定に進みます。

(2)SSLサーバ証明書の設定

  1. 自分の環境の場合、Apacheとnginxのどちらを使うか質問されたので、「2」を入力。
  2. メールアドレスを入力します。
    証明書の期限など、重要なお知らせが届くので、必ず連絡がとれるメールアドレスにしましょう。
  3. 規約に同意するよう求められます。「A」を入力。
  4. メールアドレスを電子フロンティア財団に共有するか質問されます。
    財団からメールが届くらしいのですが、不要なので「N」を入力。
  5. Webサーバに複数のサイトが同居している場合、どのサイトをHTTPS化するか質問されます。
    対象の番号を入力。

    少し待つと、自動で証明書の取得が進みます。
    nginxの設定ファイルには、必要な設定が自動追加されます。
  6. HTTPSへのリダイレクト設定をするか指定します。
    好きな方を選んで大丈夫ですが、Certbotに設定をいじられたくなければ「1」にしておきましょう。
  7. 「Congratulations!」と表示されたら、設定完了です。
    証明書の取得も終わり、使用できる状態になっています。
    ブラウザでサイトを開いて確認してみましょう。
  8. (参考)最後に重要事項が表示されます。
    証明書や秘密鍵ファイルの保存場所などが書いてあるので、気になる人は確認してみましょう。

【メモ】
半年ほど前にこの設定をした際、androidスマートフォンのChromeブラウザでサイトを表示すると、「この接続ではプライバシーが保護されていません」「このサイトのセキュリティ証明書には問題があります」というエラーが表示されることがありました。

nginxの設定ファイルで証明書ファイル「cert.pem」を指定している部分を、中間CA証明書も含む「fullchain.pem」に置き換えると解消しました。

ssl_certificate /etc/letsencrypt/live/example01.jonkara.net/cert.pem;

ssl_certificate /etc/letsencrypt/live/example01.jonkara.net/fullchain.pem;

最新のCertbotでは、この不具合は改善されているようです。

SSLサーバ証明書の自動更新設定

以上でSSL証明書の取得ができましたが、Let’s Encryptの証明書の有効期限は3ヶ月となっていて、期限が過ぎると使えなくなります。

3ヶ月毎に手作業で取得し直すのは大変なので、期限が切れる前に自動で更新する設定を入れましょう。

(1)証明書更新のコマンド

証明書の更新にはこんなコマンドを使います。

renewが、証明書を更新するオプションです。
–post-hookでは、証明書が更新された場合に実行するコマンドを指定します。

このコマンドの場合、もし証明書の期限が近ければ更新をして、新しい証明書を有効にするためにnginxを再起動します。
証明書の期限に余裕があれば、何も更新されず、–post-hookのコマンドも実行されません。

(2)cron設定

このコマンドを定期的に自動実行するため、cronにコマンドを登録します。

  1. cronの編集画面を表示。
  2. 以下の設定を追加します。
    ここでは、毎週日曜日の3時50分に、certbot-autoコマンドを実行するよう指定しました。
  3. 設定されたことを確認。

【注意】
cronの設定でPATHを指定しないと、「HookCommandNotFound: Unable to find post-hook command service in the PATH」というエラーになる場合があるので注意です。

まとめ

以上で、無料SSL証明書を導入し、自動更新の設定までできました。

Certbotの指示に従って進めるだけで簡単にSSL証明書の設定ができるので、ぜひ試してみましょう。



コメントを残す

メールアドレスが公開されることはありません。