Apache2.4環境でのLet's Encrypt証明書設定

## はじめに
CentOS7.9のApache2.4環境で、SSL/TLSサーバ証明書を発行して利用する為の設定メモです
今時ホームページで暗号化は必須ということで、証明書を取得・設定をしてHTTPS化します。

今回はLet’s Encryptを利用した、無料の証明書を使用します。

以下、公式のHPです。
[Let’s Encrypt](https://letsencrypt.org/ja/)

## 作業の流れ(以下の続きです)
[1. CentOS7.4 にMariaDB10を導入する](https://qiita.com/ymachida/items/01c04ffdad14d788413c)
[2. CentOS7.4 にPHP7.4を導入する](https://qiita.com/ymachida/items/d73dc3f630e9421021ad)
[3. CentOS7.9 にWordpress5.8を導入する](https://qiita.com/ymachida/items/062b8ab41adcfb7413c6)
[4. Wordpress5.8導入後のセキュリティ設定まとめ](https://qiita.com/ymachida/items/8d9a2e9abfec46991f50)

※必須な前提としては「[2. CentOS7.4 にPHP7.4を導入する](https://qiita.com/ymachida/items/d73dc3f630e9421021ad)」のApache導入のみになります。

### Certbotインストール

```
# yum install certbot
```

### 証明書の取得

※80ポートでアクセスができることが必要です
　443ポートのみの解放しか不可の場合は、リダイレクトの設定をして対応します

```
# certbot certonly --agree-tos --non-interactive -d <ドメイン> --webroot -w <ドキュメントルート> --email <管理者メールアドレス>
```

例)

```
# certbot certonly --agree-tos --non-interactive -d hogehoge.jp --webroot -w /var/www/html --email hogehoge@example.com
```

取得できたら以下のようなメッセージが出ます

```
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Account registered.
Requesting a certificate for lala-coeur.jp
Performing the following challenges:
http-01 challenge for xxxxxxxxx.jp
Using the webroot path /var/www/xxxxx for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/xxxxxxxxx.jp/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/xxxxxxxxx.jp/privkey.pem
   Your certificate will expire on 2022-03-20. 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
```

### 証明書取得の確認

以下の場所にリンクが作成され、証明書ファイルが取得できていることを確認します

```
# ll /etc/letsencrypt/live/xxxxxxxxx.jp/
合計 4
-rw-r--r-- 1 root root 692 12月 20 13:44 README
lrwxrwxrwx 1 root root  37 12月 20 13:44 cert.pem -> ../../archive/xxxxxxxxx.jp/cert1.pem
lrwxrwxrwx 1 root root  38 12月 20 13:44 chain.pem -> ../../archive/xxxxxxxxx.jp/chain1.pem
lrwxrwxrwx 1 root root  42 12月 20 13:44 fullchain.pem -> ../../archive/xxxxxxxxx.jp/fullchain1.pem
lrwxrwxrwx 1 root root  40 12月 20 13:44 privkey.pem -> ../../archive/xxxxxxxxx.jp/privkey1.pem
```

### リンクの作成

設定ファイル定義の為のリンクを作成します

```
# cd /etc/httpd/
# ln -s /etc/letsencrypt/live live
```

結果確認

```
# ll
合計 12
drwxr-xr-x 2 root root 4096 12月  3 21:33 conf
drwxr-xr-x 2 root root 4096 12月 20 13:52 conf.d
drwxr-xr-x 2 root root 4096 11月 23 14:52 conf.modules.d
lrwxrwxrwx 1 root root   21 12月 20 13:53 live -> /etc/letsencrypt/live
lrwxrwxrwx 1 root root   19 11月 23 14:20 logs -> ../../var/log/httpd
lrwxrwxrwx 1 root root   29 11月 23 14:20 modules -> ../../usr/lib64/httpd/modules
lrwxrwxrwx 1 root root   10 11月 23 14:20 run -> /run/httpd
```

### Apacheへ証明書を定義

取得した証明書ファイルをApache設定ファイルに定義します

```
# cd /etc/httpd/conf.d/
# vi ssl.conf

SSLCertificateKeyFile /etc/httpd/live/xxxxxxxxx.jp/privkey.pem
SSLCertificateFile /etc/httpd/live/xxxxxxxxx.jp/cert.pem
SSLCertificateChainFile /etc/httpd/live/xxxxxxxxx.jp/chain.pem
```

### 設定反映

```
# systemctl restart httpd
```

ブラウザ上でhttps://xxxxxxxxx.jpにアクセスし
証明書が適用されていればOK！

## その他
証明書は90日で期限が切れてしまいます。
その為、cronで自動的に更新を行うように設定をします。

今回は以下の場所に更新用スクリプトを作成

```
# mkdir /root/oper
# vi /root/oper/cert_renew.sh

#!/bin/sh
certbot renew -q --no-self-upgrade --post-hook "systemctl restart httpd.service"
```

実行権限付与 (今回の環境はrootしか使用しないので+xでも良いが一応)

```
# chmod 700 /root/oper/cert_renew.sh
```

cron設定

※以下は毎日2時の実行例

```
# crontab -e

* 2 * * * /root/oper/cert_renew.sh
```