Let’s EncryptでTLS化する(後編)

Let’s EncryptでTLS化する(前編)」からの続きです。

4.コンフィグファイルの確認

サーバ証明書の取得と同時に、certbot-autoはhttpd.confの書き換えとファイルの自動生成も行っています。

/etc/httpd/conf/httpd.conf ※書き換え
/etc/httpd/conf/httpd-le-ssl.conf ※自動生成
/etc/letsencrypt/options-ssl-apache.conf ※自動生成

httpd.confから、httpd-le-ssl.confを読み込んで(Includeして)いる。
httpd-le-ssl.confから、options-ssl-apache.confを読み込んで(Includeして)いる。

■ httpd.confの内容(変更前)※追記された箇所
==============================
<VirtualHost *:80>
 :
    RewriteEngine on
    RewriteCond ・・
    RewriteRule ・・
</VirtualHost>

<IfModule mod_ssl.c>
    NameVirtualHost *:443
</IfModule>
Include /etc/httpd/conf/httpd-le-ssl.conf
==============================
※certbot-autoを実行した際に「httpアクセスをhttpsにリダイレクトする」とすると「Rewrite・・」の記載が追記されています。

■ httpd-le-ssl.confの内容
==============================
<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin ・・
    DocumentRoot ・・
    ServerName ・・
    ErrorLog ・・
    CustomLog ・・
    <Directory "/var/www/html/・・">
        Options ・・
        
    </Directory>
SSLCertificateFile ・・
SSLCertificateKeyFile ・・
SSLCertificateChainFile ・・
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
==============================

■ options-ssl-apache.confの内容(変更前)
==============================
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ・・
SSLHonorCipherOrder on
SSLOptions +StrictRequire
LogFormat ・・vhost_combined
LogFormat ・・vhost_common
==============================

Apacheのhttpd.conf、ssl.confの既存設定にもよりますが、このままではうまく行かない場合があります。
※僕の環境ではうまかいかなかったので、以下のような書き換えを行いました。ssl.confとhttpd-le-ssl.confの内容がダブってしまったようです。

5.httpd.confの書き換え

「NameVirtualHost *:443」は、let's Encryptがhttpd.conf に自動で記載済みでしたが、これはコメントアウトします。また、certbot-autoが自動生成したhttpd-le-ssl.confは使用しませんので、Include部分もコメントアウトします。

■ httpd.confの内容(変更後)
==============================
<VirtualHost *:80>
 :
    RewriteEngine on
    RewriteCond ・・
    RewriteRule ・・
</VirtualHost>

#<IfModule mod_ssl.c>
#    NameVirtualHost *:443
#</IfModule>
#Include /etc/httpd/conf/httpd-le-ssl.conf
==============================

6.ssl.confの書き換え

「NameVirtualHost *:443」の記載を追加します。
また、httpd-le-ssl.confの <VirtualHost *:443>…</VirtualHost> の部分を、/etc/httpd/conf.d/ssl.conf に転記します。その際、ssl.confにもともと記載があった <VirtualHost _default_:443>…</VirtualHost> の部分はコメントアウトします。

■ ssl.confの内容
==============================
LoadModule ssl_module modules/mod_ssl.so
Listen 443
NameVirtualHost *:443 (httpd.confから転記)
 :
<VirtualHost *:443> (httpd-le-ssl.confから転記)
    ServerAdmin ・・
    DocumentRoot ・・
    ServerName ・・
    ErrorLog ・・
    CustomLog ・・
    <Directory "/var/www/html/・・">
        Options ・・
        
    </Directory>
SSLCertificateFile ・・
SSLCertificateKeyFile ・・
SSLCertificateChainFile ・・
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
==============================

7.options-ssl-apache.confの書き換え

options-ssl-apache.confの中にあるLogFormatの記載をコメントアウトします(httpd.confにLogFormatの記載があるため)。

■ options-ssl-apache.confの内容(変更後)
==============================
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ・・
SSLHonorCipherOrder on
SSLOptions +StrictRequire
#LogFormat ・・vhost_combined
#LogFormat ・・vhost_common
==============================

8.サイト内リンクの書き換え

サイト内に自サイトへのリンクがある場合はソースの「http://〜」を「https://〜」に書き換えます。
修正したコンフィグファイルのチェックを行い、Apacheの再起動をすればTLS化の対応は完了です。

# apachectl configtest (httpd.conf に間違いがないかチェックする)
# /etc/rc.d/init.d/httpd restart (Apacheの再起動)

ブラウザでアクセスしてみてください。URLの欄に鍵マークが表示されます。

Let’s EncryptでTLS化する(前編)

Let's Encryptを使ってWEBページをTLS対応する方法です。無料でSSL/TLS サーバ証明書が発行されます。実際に試した環境は以下となります。

CentOS 6.10 + Apache 2.2.15

(作業はrootユーザで行います)

1.事前準備

mod_sslのインストールをします。

# yum install mod_ssl

/etc/httpd/conf.d 配下にssl.confがあり、ssl.confの中でmod_ssl.soをロードする記載があります。

Let's Encrypt は、クライアントソフトウェア「Certbot」を使用してSSL/TLS サーバ証明書を取得します。Certbotが必要とする依存関係にあるパッケージがEPELリポジトリにあるため、先にインストールしておきます。

# yum install epel-release

※最新になっている場合は実行してみても「パッケージはインストール済みか最新バージョンのため何もしません」となります。

certbotを以下のURLから取得します。

# wget https://dl.eff.org/certbot-auto

任意のディレクトリに保存して、certbot-autoに実行権限を付与します。

# chmod 775 certbot-auto
# chown root:root certbot-auto

なお、certbotをインストールする前にcertbotが外部と通信できるように80番ポートと443ポートをあけておいてください。

2.certbotのインストール

certbotを保存したディレクトリに移動し、certbot-autoを実行します。certbot-autoを実行すると、Certbotクライアントの実行に必要な複数のパッケージが自動的にインストールされます。

# ./certbot-auto

インストールが始まると以下のような質問が英語で行われます。

・連絡先のEmailアドレス
 → Let's Encryptから連絡を受けたいEmailアドレスを入力します。

・規約に同意するかどうか
 → 「A」を入力します(Agreeのこと)。

・Let's EncryptパートナーにEmailを公開するかどうか
 → 「Y」or「N」を入力します(Yes or Noのこと)。

・httpsをアクティブにするサーバ
 → 証明書を取得したいサーバを選んで番号を入力します。

・httpアクセスをhttpsにリダイレクトするかどうか
 → 「Secure」の番号を選びます(リダイレクトのこと)。

インストールが終了したら、証明書の取得に移ります。

3.サーバ証明書の取得

「example.jp」と「www.example.jp」の両方に対応するサーバ証明書を取得する場合、以下のコマンドを実行します。

# ./certbot-auto certonly --webroot -w /var/www/html -d example.jp -d www.example.jp

※上記の「/var/www/html」はドキュメントルートに置き換えてください。

証明書の取得が成功すると「IMPORTANT NOTES:」(画面の下部)に Congratulations! のメッセージが表示されます。このメッセージの中に証明書の有効期限が記載されていますので、確認しておいてください。Let's Encryptの場合は証明書の有効期限は発行から3ヶ月間となっています。

Your cert will expire on 2018-12-31.(有効期限のメッセージ)

なお、実際の証明書は以下のディレクトリに配置されます。

サーバ証明書(公開鍵)
SSLCertificateFile・・・/etc/letsencrypt/live/サーバ名/cert.pem

秘密鍵
SSLCertificateKeyFile・・・/etc/letsencrypt/live/サーバ名/privkey.pem

中間証明書
SSLCertificateChainFile・・・/etc/letsencrypt/live/サーバ名/chain.pem

Let’s EncryptでTLS化する(後編)」に続く。