centos7 ssl TSL Let's Encrypt certbot
CentOS7にcertbotでLet's EncryptなSSL
2021-02-06この頃のサイトはSSL化が必要だ。Let's Encryptで手軽に導入可能だ。さくらVPSに設置したCentOS7なApacheに導入する。
基本的にはCentOS8や最近のディストリビューションでも手順は変わらないと思う。
Let's Encryptというオープンソースな認証局のSSLを使って、無料でSSLを自分のサイトに導入することができる。
現在はTSLという単語が正解だが、ここではSSLと表記している。
Let's Encrypt
作業手順など
大まかな流れは以下の通り。- virtualhostを設定
- epel をインストール
- certbotをインストール、設定
- httpdを設定して再起動
- 自動更新を設定する(cron)
virtualhostを設定
certbotコマンドは、発行する自ホスト内のドメインにhttpもしくはhttpsでアクセスできる必要があるので設定しておく。設定ファイルを作る
# vi /etc/httpd/conf.d/virtialhost.conf
<VirtualHost *:80>
DocumentRoot /home/mydomain/public_html/
ServerName test.port443.blog
<Directory /home/mydomain/public_html/>
AllowOverride All
Require all granted
Options FollowSymLinks Includes
</Directory>
SetEnvIf Request_URI "\.(bmp|css|gif|htc|ico|jpe?g|js|mpe?g|png|swf|woff|ttf)$" nolog
CustomLog "/home/mydomain/logs/v4-access_log" combined env=!nolog
ErrorLog "/home/mydomain/logs/v4-error_log"
</VirtualHost>
httpdを再起動する
# systemctl restart httpd
epelとcertbotをインストール
certbotはepelからインストールする必要があるので、以下のコマンドでインストールする。epelをインストール
# yum -y install epel-release
certbotをインストール
# yum -y install certbot python-certbot-apache
certbotコマンドでSSLを発行する
# certbot certonly --webroot -w /home/mydomain/public_html/ -d test.port443.blog
途中、メールアドレスが聞かれたり同意を求められるが、基本そのまま回答してオッケーだ。
成功したらメッセージの最後に以下が表示される
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/test.port443.blog/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/test.port443.blog/privkey.pem
Your certificate will expire on 2021-05-06. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again. To non-interactively renew *all* of your
certificates, run "certbot 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
発行されたpemファイルを確認する
certbotコマンドで処理が正常終了すると/etc/letsencrypt/live/ドメイン名 の中にpemファイルが生成されているはずだ。確認してみよう。 このファイルを使ってSSLを設定する。# ls -l /etc/letsencrypt/live/
total 8
-rw-r--r-- 1 root root 740 Feb 6 08:33 README
drwxr-xr-x 2 root root 4096 Feb 6 08:33 test.port443.blog
# ls -l /etc/letsencrypt/live/test.port443.blog
total 4
-rw-r--r-- 1 root root 692 Feb 6 08:33 README
lrwxrwxrwx 1 root root 53 Feb 6 08:33 cert.pem -> ../../archive/test.port443.blog/cert1.pem
lrwxrwxrwx 1 root root 54 Feb 6 08:33 chain.pem -> ../../archive/test.port443.blog/chain1.pem
lrwxrwxrwx 1 root root 58 Feb 6 08:33 fullchain.pem -> ../../archive/test.port443.blog/fullchain1.pem
lrwxrwxrwx 1 root root 56 Feb 6 08:33 privkey.pem -> ../../archive/test.port443.blog/privkey1.pem
sslサイト用ののvirtualhostを設定する
/etc/httpd/conf.d/virtualhost-ssl.conf というファイルを新規作成する。ssl.confがある場合、競合する可能性があるのでリネームする。
# mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.bak
ファイルを作成する
# vi /etc/httpd/conf.d/virtualhos-sslt.conf
Listen 443 https
<VirtualHost 111.222.333.444:443>
DocumentRoot /home/mydomain/public_html/
ServerName test.port443.blog
<Directory /home/mydomain/public_html/>
AllowOverride All
Require all granted
Options FollowSymLinks Includes
</Directory>
SetEnvIf Request_URI "\.(bmp|css|gif|htc|ico|jpe?g|js|mpe?g|png|swf|woff|ttf)$" nolog
CustomLog "/home/mydomain/logs/v4-access_ssl_log" combined env=!nolog
ErrorLog "/home/mydomain/logs/v4-error_ssl_log"
SSLEngine on
SSLProtocol +TLSv1.2
SSLCertificateFile /etc/letsencrypt/live/test.port443.blog/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/test.port443.blog/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/test.port443.blog/chain.pem
</VirtualHost>
httpdを再起動する
# systemctl restart httpd
SSLを自動更新するcronを設定する
Let's Encryptは3ヶ月で失効する。これを毎月自動更新するようにして失効しないようにする。cronを編集モードでオープンする
# crontab -e
以下を追加して毎月1日に自動更新を試みる
0 04 01 * * certbot renew && systemctl restart httpd
イラスト:Loose Drawing
イラスト:Loose Drawing
Heading
Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.