Ubuntu18でcertbot+lets' encryptを使ってワイルドカード証明書を複数取得して常時SSL化+リバースプロキシがしたい
環境
Apatch2.4とNginx
443とかのポート開放済
さくらのVPSの1G
DNS-01 チャレンジ
さくらのVPSのゾーン設定
freenom
cerbotインストールしてバージョン確認
sudo apt-get install certbot
certbot --version
起動
sudo systemctl start certbot
実行
sudo certbot certonly --manual \
--server https://acme-v02.api.letsencrypt.org/directory \
--preferred-challenges dns \
-d ワイルドカード.サーバー名 -d サーバー名 -d 以下同じ \
-m SSL証明書が切れる時に教えて欲しいメールアドレス \
--agree-tos \
--manual-public-ip-logging-ok
上記を実行するとメールアドレスにメルマガ送ってもいい?と聞かれるので「y」をタイプしてエンター。
TXTレコード登録
Please deploy a DNS TXT record under the name
_acme-challenge.8528.cf with the following value:
(なんだか複雑な文字列)
と出るので、各ネームサーバーのゾーン設定に
NAME(エントリ名):_acme-challenge
TYPE(種別): TXT
TTL:3600
TARGET(値):(上記のなんだか複雑な文字列)
を設定。
さくらのネームサーバの場合、DNSチェックの設定は「する」のままにしておく、TTLのチェックはいれない。
DNSが浸透するまで適当に待つ。へそでお茶でも沸かしてればいいんじゃないかな。
しばらくしてからエンターキーを押す。
ネームサーバーを管理してるサイトが違えば設定するTXTレコの値も違うので注意な!HTTPサーバーは一度オフにしておくこと。
ここで通ったか確認できる→https://www.cman.jp/network/support/nslookup.html
あとはエンター押していく。エラーが出たらよく読む。待ち時間が30分とかいるかもしれない。
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:(以下略)
と出たら成功です。お疲れ様でした。
SSLキー生成されたか確かめる
sudo ls /etc/letsencrypt/live/ドメイン名/
中にREADME cert.pem chain.pem fullchain.pem privkey.pemがあるのが確認できればOK。
Apache2にmod_sslを導入
apache2の大元の設定はググりながら頑張ってください。ServerRootとかDocmentRootとか。
httpd.confの136行付近にある
LoadModule ssl_module modules/mod_ssl.soのコメントアウトを外す
sudo a2enmod ssl する。
sudo vim /etc/apache2/sites-available/バーチャルホスト管理してるやつ.conf に
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/該当ドメイン名/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/該当ドメイン名/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/該当ドメイン名/chain.pem
を追加していく。
もしもデフォルトのファイルを使っていないならそちらはコメントアウト。
Nginxのデフォルトとバーチャルに被らないポート番号にする。80と443以外がおぬぬめ。
エラー吐いたら sudo apache2ctl -S の中にいろいろある。
NginxにSSLを設定する
conf.d/virtual.conf に以下を追加。(conf.dコメントアウトしてるけど一応?)
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/代表にしたいドメイン名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/代表にしたいドメイン名/privkey.pem;
proxy_pass https://127.0.0.1:任意の捨ててもいいSSL用ポート番号;
捨ててもいいポート番号なのは別にそのポートでブラウザから接続できるようにはならないため。先にApacheを動かしてからNginxを動かします。ポート番号被りって怒られちゃう><;
sudo systemctl restart apache2 && sudo nginx
常時SSL化リダイレクトと拡張子によるサーバーの振り分け
常時SSL化しよう!
PHPなんかは動的ファイルが得意なApache2に、jpgとかの静的ファイルは大量にさばくのが得意なNginxに任せよう!(リバースプロキシ)
nginx/sites-available内に必要なバーチャルホストの数だけバーチャルホスト名.confとして以下を保存。
server {
listen 80;
server_name バーチャルホスト名;
return 301 https://バーチャルホスト名$request_uri;
break;
}
server {
listen 443 ssl;
server_name バーチャルホスト名;
ssl on;
ssl_certificate /etc/letsencrypt/live/該当ドメイン名/fullchain.pem;
ssl_certificate_key/etc/letsencrypt/live/該当ドメイン名/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSV1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
client_max_body_size 20M;
location / {
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass バーチャルホストIPアドレス:ポート番号;
break;
}
}
SSL化して怒られたときは。
sudo chmod 755 /etc/letsencrypt/archive/
sudo chmod 755 /etc/letsencrypt/live/
(Let’s Encrypt + Apache でちゃんと証明書の生成が完了してるのに ‘*.pem’ does not exist or is empty というエラーが出る時のメモ様より引用)
設定中に何か間違えたら。
【Nginx】portが占領されてサーバーが起動できないときの対処法
CGI許可とIP直打ち禁止はApacheでやるといいと思う
参考
Ubuntu18.04でlets' encryptを使って証明書を取得する方法
[Ubuntu 18.04/LTS]letsencryptでワイルドカード認証を取るぞ![nginx/1.17.3]
CertbotでLet's Encryptのワイルドカード証明書を取得・更新する
Let's EncryptのDNS-01チャレンジでのSSL証明書更新(手動)
[インストール] Apache 2.x + mod_ssl + OpenSSL(新規・更新)
nginxでVirtualHostを使って複数ドメインサイトを構築&SSLに対応する
Let's Encrypt で Nginx にSSLを設定する
CertbotでLet's Encryptのワイルドカード証明書を取得・更新する
.htaccessでHTTPアクセスをSSLでリダイレクト(逆もアリ)
Let’s Encrypt + Apache でちゃんと証明書の生成が完了してるのに ‘*.pem’ does not exist or is empty というエラーが出る時のメモ