Raspberry Pi 3B+(CentOS7)でRedmineにLet's EncryptのSSL証明書を設定した覚え書き

# 出来上がった環境
 Raspberry Pi 3B+
 CentOS Linux release 7.5.1804 (AltArch)
 Apache 2.4.6
 Redmine 3.4.6
 Let's Encrypt証明書


# Raspberry Pi 3B+ にCentOS7導入
Redhat系の方が操作に慣れているので、[このあたり](https://qiita.com/NAZA/items/38303564dde29977d79e)を参考にCentOS7を導入
# Redmine 3.4.6 の導入
[このあたり](http://blog.redmine.jp/articles/3_4/install/centos/)を参考に Redmine 3.4.6 + PostgreSQL 9.2.24 + Apache 2.4.6 の構成でRedmine環境を構築。
「http://[ドメイン名]/redmine/」でredmineへアクセスできるようにしておく。
[title](http://...)
いつもは、DBをMariaDB(MySQL)にしてましたが、今回は久々に建てることもあり、参考にしたサイト通りPostgreSQLを選択。
# Let's Encrypt証明書の設定
## EPELリポジトリ追加
yumでは追加できなかったので、/etc/yum.repos.d/epel.repo を手動で追加

```text:/etc/yum.repos.d/epel.repo
[epel]
name=Epel rebuild for armhfp
baseurl=https://armv7.dev.centos.org/repodir/epel-pass-1/
enabled=1
gpgcheck=0
```
あとは、[このあたり](https://qiita.com/shojimotio/items/4fa82b21390e8a6d8446)を参考に証明書を取得。

```shell-session:
# yum install epel-release
# yum install certbot python-certbot-apache
# certbot certonly --webroot -w [DocumentRoot] -d [ドメイン名]
```
Congratulations!とメッセージが出れば成功。

```shell-session:

[中略]

IMPORTANT NOTES:
Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/[ドメイン名]/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/[ドメイン名]/privkey.pem
   Your cert will expire on YYYY-MM-DD. 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
```
一応確認してみるとこんな感じになってます。

```shell-session
# ls -l /etc/letsencrypt/live/[ドメイン名]/
合計 4
-rw-r--r-- 1 root root 682  M月  D hh:mm README
lrwxrwxrwx 1 root root  36  M月  D hh:mm cert.pem -> ../../archive/[ドメイン名]/cert1.pem
lrwxrwxrwx 1 root root  37  M月  D hh:mm chain.pem -> ../../archive/[ドメイン名]/chain1.pem
lrwxrwxrwx 1 root root  41  M月  D hh:mm fullchain.pem -> ../../archive/[ドメイン名]/fullchain1.pem
lrwxrwxrwx 1 root root  39  M月  D hh:mm privkey.pem -> ../../archive/[ドメイン名]/privkey1.pem
```

## Apacheへの設定
/etc/httpd/conf.d/ssl.confを編集
あらかじめローカル証明書の設定が入っていたので下記の通り変更

```diff
#   Server Certificate:
-SSLCertificateFile /etc/pki/tls/certs/localhost.crt
+SSLCertificateFile /etc/letsencrypt/live/[ドメイン名]/cert.pem
 
 #   Server Private Key:
etc.)
-SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
+SSLCertificateKeyFile /etc/letsencrypt/live/[ドメイン名]/privkey.pem
 
 #   Server Certificate Chain:
-#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
+SSLCertificateChainFile /etc/letsencrypt/live/[ドメイン名]/chain.pem
```

Apacheを再起動

```shell-session
# systemctl restart httpd
```

ブラウザからRedmineへアクセスして証明書を確認

```text
https://[ドメイン名]/redmine/
```

発行元が「Let's Ecnrypt Authority X3」となっている。
![encrypt.png](https://qiita-image-store.s3.amazonaws.com/0/186279/d9a7ae61-a73e-9ff7-0716-89f252b80151.png)

## Redmineの設定
[管理]→[設定]→[全般]のプロトコルをHTTPからHTTPSへ変更

# memo

certbotで証明書取得で失敗した時は以下を確認

- OSやルータでポート開放されているか
- DocmentRootの指定があっているか
- DocmentRootへのアクセス権設定
- 何度も失敗してtoo many ～ とエラーが出た時はあきらめて、時間をおいてから実施