SSLサーバー証明書 Let’s Encrypt(無料)を設定する

会社のオフィシャルWEBサイトにはRapidSSLを導入していますが、ワイルドカードタイプは年間数万円かかるので、別サービスではお金の掛からない「Let’s Encryptサーバー証明書」を利用します。

リポジトリのクローン

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

依存パッケージのインストール

$ cd certbot/
$ sudo ./certbot-auto

証明書の取得

$ sudo /certbot-auto certonly --webroot -w /var/www/sample(ドキュメントルート) -d sample.plane-plan.com -m hoge@plane-plan.com --agree-tos

WEBサーバーの設定を追記(ssl.conf等)


<VirtualHost *:443>
SSLEngine on
ServerName sample.plane-plan.com:443
DocumentRoot “/var/www/sample.plane-plan.com"
SSLCertificateFile /etc/letsencrypt/live/sample.plane-plan.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/sample.plane-plan.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/sample.plane-plan.com/chain.pem
SSLProtocol all -SSLv2
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
<Directory "/var/www/sample/“>
Options -Indexes FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>

httpのアクセスをhttpsへリダイレクト


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

サーバー設定のリロード

$ sudo service httpd reload

証明書の更新

署名書の有効間は90日間です。
「certbot-auto renew」で、有効期間30日未満の証明書が更新されます。

$ certbot-auto renew

実際に更新しようとした所、エラーが発生しましたがPythonのバージョンを2.7を入れることで更新できました。

virtualenv: コマンドが見つかりません

Python2.7で動作するシェルを起動します。

$ sudo scl enable python27 bash

CentOS 6 で発生するエラーの対処法
https://letsencrypt.jp/usage/centos6-error.html

Let’s Encrypt 総合ポータル
https://letsencrypt.jp/

※追記
複数ドメインを一括で更新時に問題がありました。
一旦Apacheを停止して更新できます。

Attempting to renew cert from /etc/letsencrypt/renewal/z-groove.com.conf produced an unexpected error: Could not bind TCP port 443 because it is already in use by another process on this system (such as a web server). Please stop the program in question and then try again.. Skipping.
# service httpd stop
# certbot-auto renew
# service httpd start