Lightsailでホストしているサイトのhttps化

本サイトは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ポートを再度リッスンすることを忘れずに!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です