環境
OS: CentOS7
マシン: AWS EC2インスタンス
Web Server: Apache2.4
DNS: IPとドメイン名の紐付けがされている。
IP制限: HTTP, HTTPS共に社内ネットワークからのアクセスのみ受け付ける。
Certbotのインストール
$ yum install certbot
証明書の発行
発行時にLet's Encrypt!側のサーバからのアクセスを受け付ける必要があるので、以下のIPからのインバウンドを通すようにIP制限設定を変更する。
- 13.58.30.69
- 34.213.106.112
- 52.29.173.72
- 64.78.149.164
- 66.133.109.36
(見付けられたのが5つなのであって、他にも存在するかも)
$ certbot certonly --webroot -w /var/www/html -d hogehoge.piyopiyo.com
メールアドレスやらYES/NOやら適当に。
mod_sslのインストール
ApacheでSSLを有効にするためのモジュールをインストールする。
$ yum install mod_ssl
しかし依存関係の競合が発生して入らなかったので、最終的にrpmからインストールした。
ApacheにpemファイルのPATHを設定
/etc/httpd/conf.d/ssl.conf
...
SSLCertificateFile /etc/letsencrypt/live/hogehoge.piyopiyo.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hogehoge.piyopiyo.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/hogehoge.piyopiyo.com/chain.pem
...
Apache再起動
$ systemctl restart httpd
証明書自動更新の設定
Let's Encrypt!で発行される証明書は有効期限が90日間と非常に短いので、Cronで自動更新する。
失効が近付くとメールが送られるらしい。
$ crontab -e
00 04 01 * * certbot renew -q --no-self-upgrade --post-hook "systemctl restart httpd"
調査事項
standaloneでの発行ならIP制限を変更しないで済んだらしいが、調子に乗りすぎて発行数が上限に達してしまったので試せてない。- 来月の1日に自動更新Cronがちゃんと動いてくれるか?