■目的
CentOS7のWebサーバーを常時SSL化します。
使うのはmod_sslとLet's Encryptの無償ドメイン証明書です。

■前提条件
OS/Web
CentOS7/Apache2.4
Domain
www.example.com
SSL証明書
Let's Encrypt/無償
■インストール
mod_sslをインストールします。
# yum -y install mod_ssl
■Virtualhost
/ctc/httpd/conf/httpd.conf内に以下の記述があるのを確認します。
IncludeOptional conf.d/*.conf
証明書発行の前にVirtualhostをconf.d内のconfファイルに定義しておきます。
# vi /etc/httpd/conf.d/virtualhost.conf    <-  新規作成
NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin 管理者 emailアドレス
    DocumentRoot /home/www/html
    ServerName www.example.com
</VirtualHost>

■Certbotと証明書発行
certbotクライアントであるcertbot-autoをダウンロードし、/usr/binなどに移動させます。
certbot-autoを実行すると必要なパッケージがインストールされます。
そのまま引き続き画面の指示に従って応答すると証明書が発行されます。
証明書の保存先はコマンドのメッセージで示されるフォルダー内になります。
またconfファイル内に証明書発行に伴うエントリーが自動追加になります。
letsencryptの非公式日本語総合ポータルサイトはこちら

#wget https://dl.eff.org/certbot-auto
#chmod a+x certbot-auto
#./certbot-auto

 :
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for www.example.com
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/httpd/conf.d/virtualhost-le-ssl.conf
Deploying Certificate to VirtualHost /etc/httpd/conf.d/virtualhost-le-ssl.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Redirecting vhost in /etc/httpd/conf.d/virtualhost.conf to ssl vhost in /etc/httpd/conf.d/virtualhost-le-ssl.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://www.example.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/www.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/www.example.com/privkey.pem
   Your cert will expire on 2018-11-06. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again with the "certonly" option. To non-interactively renew *all*
   of your certificates, run "certbot-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le
# cat /etc/httpd/conf.d/virtualhost.conf

NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin 管理者emailアドレス
    DocumentRoot www.example.com
    ServerName www.example.com
RewriteEngine on
RewriteCond %{SERVER_NAME} =

www.example.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
# cat /etc/httpd/conf.d/virtualhost-le-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin 管理者emailアドレス
    DocumentRoot /home/www/html
    ServerName www.example.com
SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/www.example.com/chain.pem
</VirtualHost>
</IfModule>
■キーの指定
/etc/httpd/conf.d/ssl.confを編集しキーを指定します。 
# vi /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/www.example.com/chain.pem

# systemctl restart httpd
■証明書更新
証明書の有効期限は90日なのでcronを使って定期更新を行います。
期限30日前から更新受付で、サンプルは毎日曜日00時00分更新です。
# vi /etc/cron.d/letsencrypt
00 00 * * 0 root certbot-auto renew --post-hook "systemctl restart httpd & systemctl restart vsftpd"
■結果
無事に自前Webサイトの常時SSL化を終えました。
証明書発行はVertualhost構成が前提につき先に定義しておきます。
証明書発行はcertbot-autoのダウンロードと実行だけと終わってみれば超簡単。
httpsへのリダイレクトもcertbot-autoがやってくれました。

  blog      MovableType