HTTPS化

参考:CentOS 7とApacheをインストールした環境にLet's EncryptでHTTPSを設定 - レムシステム エンジニアブログ

前提
ドメイン名の割り当て

Conoha のコントールパネルにログインし、「DNS」画面を開く。

「+ドメイン」をクリックし、契約しているドメイン名を登録する。

登録後、下記のレコードを登録する。(※デフォルトで登録されているものはそのままにしておく)

タイプ 名称 TTL
A(通常) @ 3600 <グローバルIPアドレス>
A(通常) www 3600 <グローバルIPアドレス>
hostコマンドによる正引きの確認

インターネットの繋がっているサーバから下記のコマンドを実行して、正引きできるかを確認する。

$ host <ホスト名>
<ホスト名> has address <IPアドレス>
Apache httpd用SSL通信モジュールのインストール

SSL通信用モジュールである「mod_ssl」のインストールを行う。

$ sudo yum install mod_ssl

mod_ssl がApache のモジュールとして登録されたかどうかを下記コマンドで確認する。

$ sudo httpd -M | grep ssl
 ssl_module (shared)
Apache の再起動
$ sudo systemctl restart httpd
certbotパッケージのインストール

サーバ証明書発行について、「Let's Encrypt」を利用する。

利用するために「certbot」という名前のパッケージをインストールする。

$ sudo yum install epel-release (EPELレポジトリをインストールしていれば不要)
$ sudo yum list installed | grep epel
$ sudo yum install certbot python2-certbot-apache

certbotがインストールされているかを下記コマンドで確認する。

$ which certbot
 /usr/bin/certbot
サーバー証明書の作成

httpd に設定したドキュメントルート及び登録したドメイン名を使って、証明書を発行する。

$ certbot certonly --webroot -w <ドキュメントルート> -d <ドメイン名>

コマンド実行すると、対話型のメッセージが表示されるので回答する。

回答後、「Congratulations!・・・」と表示されれば証明書の発行は完了

表示されたメッセージに証明書の保存場所が記載されている。(「/etc/letsencrypt/live/<ドメイン名>」)

ファイルは4種類発行される。

SSL通信用の設定

HTTPS通信の設定を変更するために、「ssl.conf」ファイルを行う。

$ sudo cp /etc/httpd/conf.d/ssl.conf{,org}
$ sudo vi /etc/httpd/conf.d/ssl.conf

下記を変更する
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
↓
SSLCertificateFile <cert.pem の絶対パス>

SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
↓
SSLCertificateKeyFile <privkey.pem の絶対パス>

SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
↓
SSLCertificateChainFile <chain.pem の絶対パス>

編集後、下記コマンドを実行して設定ファイルが正常か確認する。

$ sudo httpd -t
 Syntax OK

その後、httpdサービスを再起動する。

$ sudo systemctl restart httpd
HTTPS通信の動作確認

ブラウザにWebサーバのURLを入力してアクセスする。

Chrome の場合、URL欄の横に鍵マークが表示されていることを確認する。

更新コマンドの設定

発行した証明書は有効期限が90日と決まっている。そのため、1か月に1回程度、証明書を更新すればよい。

更新できるかどうかは、下記コマンドでシミュレーションできる。(「–dry-run」がオプション)

$ sudo certbot renew --dry-run

定期的に実行できるように、crontab コマンドに追記する。

更新した場合は、httpdサービスを再起動する必要があるため、「–deploy-hook」オプションを指定する。

$ sudo crontab -e

毎月1日と15日にコマンドを実行する場合の設定

00 3 1 * * certbot renew -q --deploy-hook "systemctl restart httpd"
00 3 15 * * certbot renew -q --deploy-hook "systemctl restart httpd"

設定後、下記のコマンドで上記の設定が登録できているか確認する。

$ sudo crontab -l