今回のサイトリニューアルでお問い合わせページを新たに設置したこともあり、ホームページのhttps化を行いました。色々と検討した結果、無料SSL証明書サービスの「Let’s Encrypt」を使ってhttps化することができたので、設定方法などを公開したいと思います。

httpとhttpsの違い

ざっくり言うとWebサイトの通信方式は「http」と「https」の2種類があり、httpsは「通信内容が暗号化されている」ことを表しています。(逆にhttpは暗号化されていない、ということになります)

つい3~4年前までは個人情報やパスワードを入力するページで限定的にhttpsを使うのが一般的でしたが、近年の情報セキュリティに対するリテラシーの高まりや、ネット界の王者Googleが「https化の推奨」を発表したことにより、最近ではサイト全体をhttps化する例がかなり増えてきています。

「Let’s Encrypt」は無料で利用可能

これまでホームページをhttps化するには年間で数千円~数万円の費用がかかるのが一般的でしたが、2016年4月に正式サービスが開始された「Let’s Encrypt」を使えば、無料でhttps化を実現することができます。

厳密には、暗号化通信の実現自体はLet’s Encryptを使わなくても無料で可能ですが、Webブラウザの警告を回避するためには費用を支払って認証局のお墨付きをもらう必要がありました。

当ホームページのWebサーバはAWS(Amazon Web Services)を利用しており、少し前に「AWSで無料でSSLが利用可能になった」という記事をネットで斜め読みしていたので、「いつかhttps化するときには無料でできるな~、さすがAWS」と思っていたのですが、今回よくよく調べてみると、ELBとCloudFrontだけが対象でEC2は対象外だったことが分かりました…。

SSLのためだけにELBを入れるのも費用もかかるし本末転倒だな~と思って再度調べていたところ、「Let’s Encrypt」が今年になって正式サービスを開始していたことを知ったので、導入することにしました。

「Let’s Encrypt」の設定方法

前置きが長くなりましたが、ここからが今回行った設定手順になります。

サーバ環境

サーバOS Amazon Linux 2016.09
Webサーバ Apache 2.4

Let’s Encryptのクライアントである「certbot」のインストールを行います。

インストール終了後、「certbot」ディレクトリに移動し、「certbot-auto」を実行します。
※Let’s EncryptはAmazon Linuxをサポートしていないので、–dubugオプションが必要

実行中、「httpをすべてhttpsにリダイレクトするか?」などの対話画面がいくつか表示されるので適宜選択し、最後に「Congraturations!」のメッセージとともに設定情報が表示されたら完了です。

途中、ポート443で接続ができないエラーメッセージが表示された

FailedChallenges: Failed authorization procedure. takahashi-it.com (tls-sni-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Failed to connect to xxx.xxx.xxx.xxx:443 for TLS-SNI-01 challenge

以下の2点が原因でした。

  • AWSのセキュリティグループで443を許可していなかった
  • そもそもmod_sslが入っていなかった(443でlistenしていなかった)

どちらも超が付く単純なミスですが、単純すぎて逆に解決するのに苦労しました…。
ちなみにmod_sslは下記コマンドでインストール。

証明書の自動更新設定

Let’s Encryptの証明書の有効期限は、下の画像の通り90日間と短いです。

letsencrypt_20161018

なので、cronなどで定期的に証明書の更新を行う必要があります。

※2017年1月2日 追記

失効が間近に迫ってきたので手動で証明書の更新を行いましたが、Apacheの再起動は不要でした。なので更新時の実行コマンドは、

でOKです。

まとめ

今回、「Let’s Encrypt」を利用することで無料でhttps化を実現することができました。

個人的にはかなり画期的なサービスだと思いましたが、現時点ではそれほど普及していないような気がします。

しかし、セキュリティやUXの観点からも今後Web全体のhttps化が加速していくのは間違いないので、こういった個人でも利用しやすい無料SSL証明書サービスは、ますます広がりを見せていくと思います。