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

作業手順など

大まかな流れは以下の通り。
  1. virtualhostを設定
  2. epel をインストール
  3. certbotをインストール、設定
  4. httpdを設定して再起動
  5. 自動更新を設定する(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.

View details »