SSLを導入

最近はSSLサーバ証明書も比較的安価に導入出来るようなって、いつかは導入しようと思っていたところに、去年の12月にLet’s Encryptなるサービスが公開された(まだバージョンはベータの模様)ため、ものは試しに自分のブログに適用。古いAndroidやガラケーでのアクセス時に不具合が発生してしまうが、無料だし、cronに仕込めば自動で証明書の期限を延ばすことが出来るしで大変便利。良い時代になったものだ。
今後も使用する可能性が高いため、自分が行った手順をメモとして残しておく。
ちなみに環境はCentOS6.4。

  • Python2.7を導入
    CentOS 6.4は標準のライブラリに登録されているPythonのバージョンが古く、このままでも導入は可能なのだが、ことあるごとにバージョンが古いと警告してくるため、新しめのバージョンを導入する。
yum install centos-release-SCL
yum install python27 python27-python-tools
scl enable python27 bash
  • Let’s Encryptを導入
    GitHubに必要なファイル一式公開されているので、Gitコマンドで取得
cd /usr/local/
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
  • Let’s Encryptの実行
    以下のコマンドを実行。初回は必要なライブラリのインストールが行われる。
./letsencrypt-auto --webroot \
-w ドキュメントのルートパス -d ドメイン名 \
-w ドキュメントのルートパス -d ドメイン名 \
-w ドキュメントのルートパス -d ドメイン名 \
-m メールアドレス --agree-tos

無事成功すれば証明書が以下のディレクトリに生成される。

/etc/letsencrypt/live/ドメイン名/
  • Apacheへの適用
    先ほど生成した証明書を用い、VirtualHostを追加。
<VirtualHost *:443>
  DocumentRoot ドキュメントのルートパス
  ServerName ドメイン名

  SSLEngine on
  SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2
  SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
  SSLCertificateFile /etc/letsencrypt/live/ドメイン名/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン名/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/ドメイン名/chain.pem
  ・
  ・
  ・

あとはApacheの再起動

service httpd restart

ひとまずはこれで一段落

  • 有効期限の自動更新
    Let’s Encryptのいいところで、コマンド実行で証明書の期限を更新できる。期限は90日で固定とのことなので、定期的にcronなり手動なりで実行すればOK。Apacheの再起動を行えば更新作業も完了。
./letsencrypt-auto certonly --webroot
-w ドキュメントのルートパス -d ドメイン名 \
-w ドキュメントのルートパス -d ドメイン名 \
-w ドキュメントのルートパス -d ドメイン名 \
--renew-by-default