質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.62%

EC2サーバ内でLet's Encryptを用いた証明書の発行

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 1,500

m1st

score 15

前提

  • EC2
  • Amazon Linux 
  • Tomcat8
  • Apache/2.2.34 
  • 独自ドメインを取得後、Route53によりIPアドレスと紐づけ完了
  • digコマンドによりドメインとIPアドレスの対応は確認済み

実現したいこと

現在、独自ドメインを取得後Let's Encryptを用いてApacheの通信をSSL化しようと考えています。
いくつかのQiitaの記事なども参照しながら行いました。

  1. cerbotのインストール
  2. 証明書の発行
    certbot-auto certonly --webroot -w /var/www/html -d [取得した独自ドメイン] --email [メールアドレス]  -n --agree-tos --debug
    ・オプションの意味
    -n    対話の入力をスキップ    
    --agree-tos    利用規約に同意する    
    --debug    AWSではこれがないとエラーになる

上記のコマンドを実行すると下記のエラーが出てきて、証明書の発行が上手くできません。

# certbot-auto certonly --webroot -w /var/www/html -d [独自ドメイン] --email [メールアドレス] -n --agree-tos --debug
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for [独自ドメイン]
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges
Exiting abnormally:
Traceback (most recent call last):
  File "/opt/eff.org/certbot/venv/bin/letsencrypt", line 11, in <module>
    sys.exit(main())
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/certbot/main.py", line 1364, in main
    return config.func(config, plugins)
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/certbot/main.py", line 1249, in certonly
    lineage = _get_and_save_cert(le_client, config, domains, certname, lineage)
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/certbot/main.py", line 121, in _get_and_save_cert
    lineage = le_client.obtain_and_enroll_certificate(domains, certname)
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/certbot/client.py", line 410, in obtain_and_enroll_certificate
    cert, chain, key, _ = self.obtain_certificate(domains)
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/certbot/client.py", line 353, in obtain_certificate
    orderr = self._get_order_and_authorizations(csr.data, self.config.allow_subset_of_names)
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/certbot/client.py", line 389, in _get_order_and_authorizations
    authzr = self.auth_handler.handle_authorizations(orderr, best_effort)
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/certbot/auth_handler.py", line 82, in handle_authorizations
    self._respond(aauthzrs, resp, best_effort)
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/certbot/auth_handler.py", line 161, in _respond
    self._poll_challenges(aauthzrs, chall_update, best_effort)
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/certbot/auth_handler.py", line 232, in _poll_challenges
    raise errors.FailedChallenges(all_failed_achalls)
FailedChallenges: Failed authorization procedure. [独自ドメイン] (http-01): urn:ietf:params:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://[独自ドメイン]/.well-known/acme-challenge/AeGl_pZiBRDM1qoWopM5HIaBS_zRfWGUo5G90xPV-ag [IPアドレス]: 404
Please see the logfiles in /var/log/letsencrypt for more details.

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: [独自ドメイン]
   Type:   unauthorized
   Detail: Invalid response from
   http://[独自ドメイン]/.well-known/acme-challenge/AeGl_pZiBRDM1qoWopM5HIaBS_zRfWGUo5G90xPV-ag
   [IPアドレス]: 404

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address.


なぜできないのか分からず、ネットで調べても原因が特定できなかったため質問させていただきました。
分かる方がいらっしゃれば回答のほどよろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

ドメインの所有者であることを Let's Encrypt 側から確認できないから失敗してる状況です。
エラーログに 404 だと指摘されている場所になにかファイルを置けば、それで所有者確認オッケーとなり、コマンドが成功するようになります。
あるいはファイルを置かずに、 DNS 設定に指定された文字列を書き込むことで確認を済ませる方法もあるので、お好きな方をどうぞ。


追記(まとめ):
certbot-auto がオプションに従い /var/www/html/.well-known/acme-challenge/ 以下にファイルを生成するのに対し、 apache が当該パスのリクエストを tomcat に流してしまって、生成されたファイルを見ないことに起因する現象でした。
apache の設定に ProxyPass の除外設定を追加することで解決しました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/23 00:27

    うまく行きませんでしたか…頑張ってください :+1:

    キャンセル

  • 2019/01/23 00:43 編集

    試行錯誤しているとできました!!!
    set0gut1さんの方法で合っていたのですが、httpd.conf内では上から順に設定が読み込まれていくことを知らなかったため、下記のような設定にすると証明書の発行ができました。
    --------------------------------------------
    ProxyPass /.well-known/acme-challenge/ !
    <Location />
    ProxyPass ajp://localhost:8009/
    </Location>
    --------------------------------------------
    全てset0gut1さんのおかげです!
    本当に助かりました!!!<m(__)m>

    キャンセル

  • 2019/01/23 00:51

    なるほど、おめでとうございます!

    キャンセル

0

firewallで80/tcpを開ける必要がありますが開いてますか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/22 20:13

    今確認したところEC2のセキュリティグループ設定で、80/tcpは開放させています。

    キャンセル

  • 2019/01/22 20:40

    サーバ側は開いてますか?

    キャンセル

  • 2019/01/22 22:49 編集

    返信遅れてすいません。
    サーバ側のポート80は開いていました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる