本サイトはAWSのLightsailでホストしています。Lightsailでホストしているサイトをhttps化するためのドキュメントがAWSから公開されているのですが、自分の環境ではうまくいかなかったので、解決策のメモです。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/lightsail-bitnami-wildcard-ssl-cert/
発生した問題
上述のドキュメント通りに進めたのですが、証明書発行のタイミングで以下のエラーが発生しました。
bitnami@ip-172-26-3-111:/tmp$ sudo /opt/bitnami/letsencrypt/lego --email="xxxx@gmail.com" --domains="www.blog.gggorilla.com" --dns lightsail --path="/opt/bitnami/letsencrypt" run
2021/12/23 16:12:37 [INFO] [blog.gggorilla.com] acme: Obtaining bundled SAN certificate
2021/12/23 16:12:37 [INFO] [blog.gggorilla.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/61292235250
2021/12/23 16:12:37 [INFO] [blog.gggorilla.com] acme: Could not find solver for: tls-alpn-01
2021/12/23 16:12:37 [INFO] [blog.gggorilla.com] acme: Could not find solver for: http-01
2021/12/23 16:12:37 [INFO] [blog.gggorilla.com] acme: use dns-01 solver
2021/12/23 16:12:37 [INFO] [blog.gggorilla.com] acme: Preparing to solve DNS-01
2021/12/23 16:12:38 [INFO] [blog.gggorilla.com] acme: Cleaning DNS-01 challenge
2021/12/23 16:12:38 [WARN] [blog.gggorilla.com] acme: cleaning up failed: lightsail: InvalidInputException: These parameters are required: domainName
{
RespMetadata: {
StatusCode: 400,
RequestID: "18fbda75-1996-45df-a28a-06f4d89fa9b2"
},
Code_: "MissingParams",
Message_: "These parameters are required: domainName"
}
2021/12/23 16:12:39 [INFO] Deactivating auth: https://acme-v02.api.letsencrypt.org/acme/authz-v3/61292235250
2021/12/23 16:12:39 Could not obtain certificates:
error: one or more domains had a problem:
[blog.gggorilla.com] [blog.gggorilla.com] acme: error presenting token: lightsail: InvalidInputException: These parameters are required: domainName
{
RespMetadata: {
StatusCode: 400,
RequestID: "0f2553bd-398b-4e8e-adca-de82b2a0eeac"
},
Code_: "MissingParams",
Message_: "These parameters are required: domainName"
}
dns
をRoute53にすれば問題なく発行されることは確認できたのですが、自分はLightsailのdns
を利用していたためRoute53のdns
で発行した証明書は利用できませんでした。
解決策
今回利用しているLegoには、さまざまなドメイン認証の方法が用意されています。先ほど失敗したコマンドはDNSを利用した認証ですが、DNS認証ではない他の認証方法を利用することで、無事証明書を発行することができました。
実行したしたコマンドはこちらです。
sudo /opt/bitnami/letsencrypt/lego --email="xxxx@gmail.com" --domains="www.blog.gggorilla.com" --tls --path="/opt/bitnami/letsencrypt" run
こちらの認証を利用する際の注意点として443ポートをフリーにしておく必要があります。LightSailで動いているApacheはデフォルトで443ポートをリッスンしているので、Apacheの設定でこちらをコメントアウトする必要があります。
/opt/bitnami/apache2/conf/bitnami/bitnami.conf
...
# Error Documents
ErrorDocument 503 /503.html
# Bitnami applications installed with a prefix URL (default)
Include "/opt/bitnami/apache2/conf/bitnami/bitnami-apps-prefix.conf"
</VirtualHost>
# Default SSL Virtual Host configuration.
<IfModule !ssl_module>
LoadModule ssl_module modules/mod_ssl.so
</IfModule>
# Listen 443 <- ここをコメントアウト
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !
EDH !RC4"
...
設定を変更したら一度Apacheの再起動をかけます。
sudo /opt/bitnami/ctlscript.sh restart apache
その後、先ほどのコマンドを実行すると証明書が発行されます。
sudo /opt/bitnami/letsencrypt/lego --email="xxxx@gmail.com" --domains="www.blog.gggorilla.com" --tls --path="/opt/bitnami/letsencrypt" run
その後はドキュメント通りに進めればOKですが、Apacheで443ポートを再度リッスンすることを忘れずに!