CentOS7 + Apache2.4 を 無料 の SSL 「Let’s Encrypt」でSSL化

2018年7月からHTTPのサイトでChromeの強制的な警告表示が出るようになりました。

どのサイトでもSSL化必須ということで、CentOS7 + Apache2.4環境で無料のSSL「Let’s Encrypt」の導入を試してみました。

★関連記事
CentOS6 + Apache2 を無料のSSL「Let’s Encrypt」でSSL化

 

念のため無料のSSLですが暗号強度的には変わりはありません。
https://ssl.sakura.ad.jp/column/free-or-paid/

そもそも無料のSSL(というかドメイン認証)って安全なの?ということでSSLサーバー証明書の違いなど。
https://ssl.sakura.ad.jp/column/attestation-level/

 

流石、さくらさん「Let’s Encrypt」の運営元のISRGのスポンサーだけあって資料がとてもわかりやすいです。

 

そういえば以前に上場企業がDV証明書を使っていて議論になっていたことがありました。
https://twitter.com/HiromitsuTakagi/status/1004013636883382274

余談ですがこちらのサイトはクレジットカードの流出があって既にEV証明書を使っているのですが。
http://www.itmedia.co.jp/news/articles/1805/10/news062.html

そして本家サイトがSSL無しというところも風情があって。。。

 

さて、実際問題としてサイトを立てていく上で都度EV認証とかはポリシーによってはあまり現実的でないケースもあるので、DV証明書の中でも使い勝手の良い証明書の「Let’s Encrypt」の導入を試してみます。

「Let’s Encrypt」を運用していく上での大きな特徴は以となります。

・基本無料である
・更新は90日で行う
・更新はツールで自動更新を行うため、コマンドベースのクライアントが必要

今回導入する環境は「CentOS7.5 + Apache2.4」です。

 

インストール

Let’s Encryptで使うクライアントツールはACMEプロトコルに対応したCertbotというクライアントが必要です。
http://jxck.hatenablog.com/entry/letsencrypt-acme

CentOS7ではApache用のCertbotクライアントは、EPELリポジトリからインストールすることができます。

以下ではEPELのリポジトリも導入していますが、設定済みの方は上の行は必要ありません。

 

次のようにオプションを指定して certbot コマンドを実行します。

以下では「example.com」となっていますが、-d オプションには、証明書を発行するサーバーのドメインを入れてください。
-w オプションでは DocumentRoot のパスを指定します。

 

上記のように「Congratulations!」と出て入れば導入は完了です。

証明書関連のファイルを以下で確認してみます。

 

「サーバ証明書(公開鍵)」、「中間証明書」、「サーバ証明書と中間証明書が結合されたファイル」、「秘密鍵」の4つのファイルができます。

ApacheにSSLの設定は以下で実施できます。

尚、「サーバ証明書と中間証明書が結合されたファイル(fullchain.pem)」を設定すれば個別に中間証明書は必要ありません。

 

apacheを再起動します。

 

これで無事SSLのインストールが実施できました。

自動更新の設定

「Let’s Encrypt」では証明書は90日で切れてしまいます。

そこで、cron などで定期的なクライアントのインストールを実行します。

 

上記のコマンドで証明書の有効期限が30日以内になると、再インストールを行います。

「–force-renewal」のオプションをつけていないので上記日数にならないとインストールは行いません。

毎日実行していますが、こちらは「Let’s Encrypt」に負荷をかけません。

尚、証明書の再インストールが行われると自動的にapacheの再起動を行います。

https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-centos-7