CentOS7で「Let’s Encrypt」を利用しバーチャルドメインで複数ドメインをSSL化

hostコマンドで正引き確認

まず、「Let’s Encrypt」を利用するにはホスト名が正引きできること(ホスト名からIPアドレスを参照可能)が条件となっているので、hostコマンドでホスト名からIPアドレスが引けることを確認します。

※hostコマンドはデフォルトでインストールされていないので、yumコマンドでインストールします。

# yum install bind-utils

インストールが完了したら、hostコマンドを使います。

#host www.hogehoge.com
www.hogehoge.com has address XXX.XXX.XXX.XXX

入力したホスト名からIPアドレスが表示されることを確認します。

ファイアウォールでHTTPSサービス(443)のポート開放

次に「Let’s Encrypt」を利用するには443ポートでWEBサーバーにアクセスできることが条件となっているので、firewallコマンドで443ポート開放の設定をします。

# firewall-cmd --add-service=https --permanent
# firewall-cmd --reload

設定が完了したら、実際にポート開放されているか?を確認します。

# firewall-cmd --list-all

「services:」のところに「https」と表示されていれば開放されています。更に「CMANインターネットサービス」様の「Portチェックテスト【外部からのPort開放確認】」で実際にWEBサーバーの443ポートへアクセスできるか?を確認します。

https://www.cman.jp/network/support/port.html

SSLモジュールのインストール

# yum install mod_ssl

インストールが完了したらhttpdを再起動します。

# systemctl restart httpd

epelレポジトリのインストール

「certbot」をインストールするにはレポジトリの「epel」が必要になります。前準備として「epel」レポジトリをインストールします。

# yum install epel-release

インストールが完了したらyumコマンドで利用可能なレポジトリリストを確認します。

# yum repolist

「epel」が表示されれば利用可能です。

certbotパッケージのインストール

# yum install certbot

python2-certbot-apacheパッケージのインストール

# yum install python2-certbot-apache

certbotパッケージのインストール確認

# yum list installed | grep  certbot

「certbot」「python2-certbot-apache」が表示されればインストールが完了しています。

certbotコマンドで証明書の発行

# certbot certonly --webroot -w /var/www/html/ -d www.hogehoge.com -d hogehoge.com

バーチャルホストで複数のドメインがある場合は、ドメインの数だけコマンドを実行

# certbot certonly --webroot -w /var/www/html/domain01/ -d www.domain01.com -d domain01.com
aving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): hoge@hogemail.co.jp ←メールアドレスを入力
Starting new HTTPS connection (1): acme-v01.api.Let'sEncrypt.org
 
-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A ←利用規約に同意するか?に「A(同意)」を入力
 
-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to Encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: N ←メーリングリストに加入するか?に「N(いいえ)」を入力

「Congratulations!」と表示されるとサーバーの証明書がサーバー内に保存されます。エラーが出た場合は証明書は発行されないので、再度、ホスト名の正引きの確認、WEBサーバーの80ポート、443ポートへのアクセス等に間違いがないか?を確認します。

サーバー内に保存された証明書ファイルの確認

# cd /etc/letsencrypt/live/www.hogehoge.com ←certbotコマンドで入力したドメインがフォルダ名になっています。

必要な3つのファイル「cert.pem」「chain.pem」「privkey.pem」があることを確認します。

ssl.confファイルの修正

まずは、オリジナルファイルのバックアップ

# cp -p ssl.conf ssl.conf.org

次にssl.confファイルの修正

<VirtualHost _default_:443> ←ここから
 ・
 ・
 ・
</VirtualHost>←ここまでを全て削除

メインのドメインのconfファイル作成

メインのドメインを「ServerName www.hogehoge.com」、「DocumentRoot /var/www/html」として設定します。

<VirtualHost *:80>
 ServerName www.hogehoge.com
 ServerAlias hogehoge.com
 DocumentRoot /var/www/html

 RewriteEngine on
 RewriteCond %{HTTP_HOST} ^hogehoge\.com$
 RewriteRule ^/(.*) http://www.hogehoge.com/$1 [R=301,L]

 RewriteEngine on
 RewriteCond %{HTTPS} off
 RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

 ErrorLog "logs/error_log"
 CustomLog "logs/access_log" combined
</VirtualHost>

<VirtualHost *:443>
 ServerName www.hogehoge.com:443
 DocumentRoot /var/www/html
 ErrorLog "logs/error_log"
 CustomLog "logs/access_log" combined

 SSLCertificateFile /etc/letsencrypt/live/www.hogehoge.com/cert.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/www.hogehoge.com/privkey.pem
 SSLCertificateChainFile /etc/letsencrypt/live/www.hogehoge.com/chain.pem

 SSLProtocol all -SSLv2 -SSLv3
 SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
 SSLHonorCipherOrder on
 Header always set Strict-Transport-Security "max-age=15768000"
</VirtualHost>

バーチャルホストのconfファイル作成

バーチャルホストのドメインを「ServerName www.domain01.com」、「DocumentRoot /var/www/html/domain01」として設定します。

<VirtualHost *:80>
 ServerName www.domain01.com
 ServerAlias domain01.com
 DocumentRoot /var/www/html/domain01

 RewriteEngine on
 RewriteCond %{HTTP_HOST} ^domain01\.com$
 RewriteRule ^/(.*) http://www.domain01.com/$1 [R=301,L]

 RewriteEngine on
 RewriteCond %{HTTPS} off
 RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

 ErrorLog "logs/domain01_error_log"
 CustomLog "logs/domain01_access_log" combined
</VirtualHost>

<VirtualHost *:443>
 ServerName www.domain01.com:443
 DocumentRoot /var/www/html/domain01
 ErrorLog "domain01_logs/error_log"
 CustomLog "domain01_logs/access_log" combined

 SSLCertificateFile /etc/letsencrypt/live/www.domain01.com/cert.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/www.domain01.com/privkey.pem
 SSLCertificateChainFile /etc/letsencrypt/live/www.domain01.com/chain.pem

 SSLProtocol all -SSLv2 -SSLv3
 SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
 SSLHonorCipherOrder on
 Header always set Strict-Transport-Security "max-age=15768000"
</VirtualHost>

confファイルの設定が完了したらhttpdを再起動します。

# systemctl restart httpd

ブラウザで確認

URLにドメインを入力し、chrome等で「保護された通信」と表示されれば正常にHTTPS通信が出来ています。

証明書の自動更新設定

# crontab -e
00 3 * * 1 certbot renew -q --deploy-hook "systemctl restart httpd"
00 5 * * 1 certbot renew -q --deploy-hook "systemctl restart httpd"

毎月1日の3時と5時に証明書を更新し、成功したら、httpdを再起動する

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)