Let’s Encrypt(レッツエンクリプト)とは
無料で使えるSSL/TLS証明書発行サービスです。
2016年4月12日から正式サービスが開始しましたが、すでに、2015年9月のスタートから、170万以上の証明書を発行しているそうです。
Let’s Encrypt – Free SSL/TLS Certificates
SSL/TLSとは
SSL/TLSとは、インターネットを暗号化して、送受信できる仕組みです。
昔から、ネットショップなどで買い物をする際、クレジットカードなどの情報を安全にやり取りするために使われています。
そして、Googleが常時SSL/TLSを推奨し、普通のWebサイトでも暗号化が求められる時代になってきました。
SSL/TLSは、手続きが面倒で、有料であることが多いですが、Let’s Encryptは、違いました。
事前準備
ツクメモは、さくらVPSなので、そちらで作業いたします。
サーバーはApacheです。
Let’s Encryptを入れる前に、インストールされている必要があるパッケージを確認します。
バージョンの確認ができれば大丈夫でしょう。
$ httpd -v (バージョン情報) $ openssl version (バージョン情報) $ rpm -aq | grep mod_ssl (バージョン情報) $ git --version (バージョン情報)
SSL/TLS通信のための443ポートを確認
SSL/TLS通信のための、443ポートが開いているか、確認します。
こんな感じででれば、大丈夫だと思います。
$ sudo iptables -L | grep https ACCEPT tcp -- anywhere anywhere tcp dpt:https
Let’s Encryptのインストール
Let’s Encryptでは、環境にあわせて、いくつかのプラグインが提供されています。
今回は、あまり環境に左右されないwebrootで証明書を取得します。
セットアップ
まず、ダウンロードとインストールを行います。
$ git clone https://github.com/letsencrypt/letsencrypt $ cd letsencrypt $ ./letsencrypt-auto --help
証明書の取得
webrootコマンドで、ドキュメントルートとドメイン名をオプションに設定します。
$ ./letsencrypt-auto certonly --webroot -w /var/www/html/tukumemo.com -d tukumemo.com -d www.tukumemo.com
コマンドで、メールアドレスを設定しませんでしたが、ここで聞かれました。
オプションについて
certonly | 証明書の取得のみを行います。 |
---|---|
–webroot | ドキュメントルートに、認証用ファイルを生成します。 |
-w | ドキュメントルートを指定します。 |
-d | 証明書を取得するドメイン名を指定します。 複数設定できます。 |
証明書をサーバーに設定
以下の場所に証明書が取得されるので、vhosts.confやssl.confなどに設定してください。
証明書
/etc/letsencrypt/live/tukumemo.com/cert.pem
証明書+中間CA証明書
/etc/letsencrypt/live/tukumemo.com/fullchain.pem
秘密鍵
/etc/letsencrypt/live/tukumemo.com/privkey.pem
中間CA証明書
/etc/letsencrypt/live/tukumemo.com/chain.pem
$vi /etc/httpd/conf.d/vhosts.conf <VirtualHost *:443> (略) SSLCertificateFile /etc/letsencrypt/live/tukumemo.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/tukumemo.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/tukumemo.com/chain.pem </VirtualHost> $ service httpd reload
Apacheのバージョンでも少し書き方が違うようなので、適宜確認してください。
confファイルのチェック
設定にエラーがないことを確認しましょう。
$ httpd -t Syntax OK
自分に起きたエラー
私の場合、こんなエラーに遭遇しました。
mod_sslを有効にする
Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration
confのどこかにmod_sslを有効にする記述を入れます。
LoadModule ssl_module modules/mod_ssl.so
証明書のパーミッション
SSLCertificateFile: file '/etc/letsencrypt/live/tukumemo.com/cert.pem' does not exist or is empty
証明書のパーミッションを変更しました。
.htaccessにリダイレクトを入れる
アクセスされたとき、httpsになるように.htaccessにリダイレクトの設定を記入します。
RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
証明書を自動更新
証明書を自動更新するためにcrontabに登録します。
crontabとは、設定した時間になったらスクリプトなどを実行してくれるコマンドです。
$ crontab -u root -e 00 05 * * 5 /home/morisan/letsencrypt/letsencrypt-auto renew --force-renew && service httpd reload
SSL/TLSの問題
こうして、tukumemoがSSL/TLSになったのですが、いくつか問題が起きました。
Amazonのアフェリエイト
Amazonのアフェリエイトがhttpsに対応していないです。
そこで、iframeを利用した公式のものではなく、アフェリエイトタグを生成するWebサービスを利用します。
他にもいろいろありましたが、ツクメモでは、こちらを採用いたしました。
出力されたタグは、書き換えできるので、httpsでない画像部分を書き換えます。
http://ecx.images-amazon.comをhttps://images-na.ssl-images-amazon.comに変えると、大丈夫になります。
いまのところ、手動なので、全ページに適用しておりません。
はてなブックマーク
すごく困ることではありませんが、httpのときに頂いたブックマークが0になってしまいました。
まとめ
root権限でアクセスできるサーバーが必要になるので、それ自体の敷居は高いと思いますが、すでに環境があって、SSL/TLSにしていない場合、結構簡単にできるので、やってみてはいかがでしょうか。
では!
売り上げランキング: 13,941
コメント