2016-02-02

【無料HTTS】 Let's Encrypt を試してみた!

先日Googleが 「HTTPS ページが優先的にインデックスに登録されるようになります」というアナウンスをしたんで、さすがに私が運営している個人サイトでも https通信に対応させないとまずいだろうと思い、最近話題になっている「Let's Encrypt」を試してみました。

※なお、2016/02/01現在でまだパブリックベータですので企業向けサイトにはまだ利用するべきではないと個人的には思っています。




今回の結論:
無料でHTTPSを利用できるようにしてくれてホントにありがとう!(^-^)b でも、できればもう少し有効期間を伸ばしてくれたらなー。


インストール

Gitでパッケージをコピーしてコマンドを実行するだけです。

こちらのページがとても親切に説明してくれていますのでインストール方法については省略します。
↓↓↓
無料SSL証明書の Let's Encrypt が公開されたので実際に試してみた


私の場合は --webroot をつけてウェブルート・モードを利用しました。
その際に少しハマってしまったのが以下2点です。

  • sudo をつけないと認証に必要なファイルを作成できなかった。
  • 作成するファイルのパスが正しくなかったので認証できなかった。

つまり流れとしては、

1. 指定したウェブルート/.well-known/acme-challenge 内に認証ファイルを作成

2. 指定したドメイン/.well-known/acme-challenge/*********** にアクセスがあることで認証を完了

というものでしたので、私の好きな Laravel では「ウェブルート/public」にしなければいけないのでした。^-^;
(Google Analyticsとかの認証と同じやり方ですねー。)


しかし、結果として以下のように証明書をゲット。


あとは httpdのコンフィグファイル(httpd.conf等)に以下のように追加すればOK!

1.NameVirtualHost を追加
 NameVirtualHost *:443  
2.SSL接続の設定を追加
 <VirtualHost *:443>  
   SSLEngine on  
   SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem  # ゲットした証明
   SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem  # ゲットした証明キー
   DocumentRoot /var/www/html/www.example.com/public  
   ServerName www.example.com  
   ServerAlias example.com  
 </VirtualHost>  
3.最後に忘れちゃいけない restart
 service httpd restart  

はい!
これで https://example.com に接続が可能になるはずです!

※ ちなみに、iptablesの443ポートを開けるのをお忘れなく(←私です^-^;)


自動で証明を更新

あとは、90日で証明の期限がきれるので crontab を使って自動で再取得をしましょう。

↓こんな感じです

 0 5 1 * * /YOUR_PATH/letsencrypt-auto certonly --webroot -w /var/www/html/example.com/public -d example.com --renew-by-default --debug && service httpd restart  


(追記: 20160724)

どうやらLetsencrypt の仕様が変わって上記の「letsencrypt-auto」コマンドは使えなくなってしまったようで実行しても以下のようなエラーが発生してしまいます。

【エラー】
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 scriptへのアップグレードかOSパッケージの利用をおすすめします。

・・・ということで新しい更新プログラムのインストールは以下をご覧ください。


1.どこか適当なフォルダにcertbotをインストール

といっても git clone で自動でダウンロードができます。以下を実行しましょう。
(現在いるフォルダ直下にフォルダを作成する例になります。)

 git clone https://github.com/certbot/certbot ./certbot

2.自動で更新ができるように cron に以下を追加しましょう。

 0 5 1 * * /YOUR_PATH/certbot-auto certonly --webroot -w /var/www/html/example.com/public -d example.com --renew-by-default --debug && service httpd restart  



以上です。
次は mod_spdy か mod_http2 とかを試してみようかな〜。^-^


(追記 1)いつも忘れちゃうので apacheのコンフィグファイルの内容を保存。
どうやら apache のバージョンによってアクセスするべきファイルが少し違うらしい。
 <VirtualHost *:443>  
   SSLEngine on  
   SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem  
   SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem  
   SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem  
   DocumentRoot /var/www/html/example.com/public  
   ServerName example.com  
   <Directory "/PATH/TO/example.com/public"> 
     AllowOverride All
   </Directory> 
 </VirtualHost>  


(追記 2)ちなみにHTTPSへ移行した後、ブラウザでアクセスすると「混在コンテンツ」として警告をうけることがあります。
これは、HTTPSでアクセスしたページに「http://」で始まっているCSSやJavaScriptなどが存在しているという意味です。

解決するためには、以下のように「http:」の部分を削除してしまえばOK。
あとはブラウザが自動でプロトコルを選択してくれます。

 <link href='//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>