Let’s Encrypt(レッツ・エンクリプト)は、誰でも自由に使えてオープンな仕様を目指している非営利団体ISRG (Internet Security Research Group) が提供している無料SSL証明書サービスです。
証明書の発行・インストール・更新のプロセスを自動化することでコストを抑え、無料で利用することができるそうです。ありがとうございます!
なお、SSL証明書の有効期限は3ヶ月しかありません。しかし、更新し続けることでずっと利用可能です。(やり方は後述)
Let’s Encrypt の証明書の発行と設置、および更新を自動で行ってくれるプログラムである Certbot クライアントのインストールが必要です。
これ以降は、SSL化したいWEBサーバー上での操作説明になります。
まずは、EPELリポジトリを利用できるように設定します。(EPEL: Extra Packages for Enterprise Linux)
(すでにEPELリポジトリを導入済みの場合はスキップしてください)
% sudo yum install epel-release
次に、Certbot クライアントをインストールします。
% sudo yum install certbot python-certbot-apache
% cd ~/sysad % wget --no-check-certificate https://dl.eff.org/certbot-auto % chmod a+x certbot-auto
% ./certbot-auto
% certbot-auto
Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): YOUR_EMAIL@example.com
Please read the Terms of Service at : (A)gree/(C)ancel: A
Would you be willing to share your email address with the Electronic Frontier : (Y)es/(N)o: N
Which names would you like to activate HTTPS for? : blank to select all options shown (Enter 'c' to cancel): <HTTPSに対応したいドメインの番号。複数の場合はカンマまたはスペース区切りで列挙>
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. : Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1 :
筆者の環境では、以下のパスに SSL 用の conf ファイルが生成されました。
/etc/httpd/conf/vhosts/<DOMAIN>-le-ssl.conf
また、下記に証明書と鍵、および関連ファイル一式が生成されました。
/etc/letsencrypt
前項の conf ファイルを元にバーチャルホストの設定を行います。
具体的には以下のようになりました。
<FQDN.DOMAIN>.conf
<VirtualHost *:80> ServerName <FQDN.DOMAIN> # force redirect https RewriteEngine on RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,QSA,L] </VirtualHost> <VirtualHost *:443> ServerName <FQDN.DOMAIN> DocumentRoot /path/to/www/public_html ErrorLog logs/<FQDN.DOMAIN>.error_log CustomLog logs/<FQDN.DOMAIN>.access_log combined <Directory "/path/to/www/public_html"> AllowOverride All Order Deny,Allow Allow from All DirectoryIndex index.php index.html index.htm Options -Indexes Includes FollowSymLinks MultiViews </Directory> SSLCertificateFile /etc/letsencrypt/live/<FQDN.DOMAIN>/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/<FQDN.DOMAIN>/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateChainFile /etc/letsencrypt/live/<FQDN.DOMAIN>/chain.pem </VirtualHost>
設定を反映させるため、Apache をリロードします。
% sudo /etc/init.d/httpd reload
ブラウザで「https://<FQDN.DOMAIN>」にアクセスして、問題ないか確認します。
このとき、SSLの有効期限がいつまでかも確認しておくとよいでしょう。
先にも書きましたが、Let's Encrypt の無料SSL証明書の有効期限は3ヶ月しかありません。
しかし、更新を繰り返すことでずっと使い続けることができます。
更新は CRON で定期的かつ自動で行うことをオススメします。
SSL証明書を更新するにあたり、certbot-auto コマンドが必要なので、/usr/bin 配下に設置します。
wget でダウンロードしたディレクトリに移動して、certbot-auto コマンドを mv します。
% ls -1 certbot-auto* % sudo mv certbot-auto /usr/bin/certbot-auto % sudo chmod 700 /usr/bin/certbot-auto % which certbot-auto /usr/bin/certbot-auto
certbot-auto コマンドが /usr/bin 配下に設置されたことを確認し、下記のように CRON を設置します。
なお、この記述はWEBサーバーが「Apache」の場合の設定です。(Nginx の場合は記述が異なります)
/etc/cron.d/letsencrypt.cron
MAILTO="<YOUR_EMAIL@example.com>" 50 4 * * 0 root /usr/bin/certbot-auto renew --post-hook "/sbin/service httpd reload" > /dev/null
「–dry-run」オプションにより、更新処理をシミュレーションできます。
CRON を設置する前に一度は実行することをおすすめします。
% sudo /usr/bin/certbot-auto renew --dry-run : Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/<FQDN.DOMAIN>/fullchain.pem (success) :
% sudo openssl x509 -in /etc/letsencrypt/live/<FQDN.DOMAIN>/cert.pem -noout -dates notBefore=<開始日時(GMT)> notAfter=<終了日時(GMT)>