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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

4126閲覧

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

m1st

総合スコア21

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2019/01/21 17:44

前提

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

実現したいこと

現在、独自ドメインを取得後Let's Encryptを用いてApacheの通信をSSL化しようと考えています。
いくつかのQiitaの記事なども参照しながら行いました。
0. cerbotのインストール
0. 証明書の発行
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.

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

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


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

投稿2019/01/21 21:50

編集2019/01/22 15:55
set0gut1

総合スコア2413

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m1st

2019/01/22 11:12

前者の方法でやろうと考えているのですが、エラーログに 404 だと指摘されている/var/www/htmlの配下に空ファイルを置いても同じエラーが出て証明書の発行ができませんでした。置く場所が違うんでしょうか? サーバ初心者でわからないことが多く稚拙な質問ですいませんが、回答のほどよろしくお願いいたします。
set0gut1

2019/01/22 11:19

http://[独自ドメイン]/.well-known/acme-challenge/AeGl_pZiBRDM1qoWopM5HIaBS_zRfWGUo5G90xPV-ag ↑このURLが手元からcurlなどでHTTPステータスコード200で取得できる状態になっていますでしょうか。
m1st

2019/01/22 13:45

返信が遅れてすいません。 curlでHTTPステータスコードを取得したところ、404でした。 どのようにすればHTTPステータスコード200にすることができるのでしょうか?
set0gut1

2019/01/22 14:03

たぶん tomcat に処理が流れて /var/www/html/ 以下が見られてないやつだと思います。 /.well-known/acme-challenge/ は apache 側のファイルに対応させるよう apache の設定を変更すれば良いかと思いました。 参考 https://qiita.com/ken_hikita/items/a185cff226d5aa7314ac
m1st

2019/01/22 14:28 編集

set0gut1さんの言う通りで、ApacheとTomcatを連携させてajpで通信させるために Apacheのhttpd.cofファイルの中に以下を追記しておりました。参考にしたサイト(https://www.zealseeds.com/SysDevTech/apache_tomcat/connect/ajp/index.html) <Location /> ProxyPass ajp://localhost:8009/ </Location> 上の回答で頂いたURLを見てみたのですが、上記の連携をやっていてなおかつ設定すれば良いのでしょうか?質問ばかりになってしまいすいません。。
set0gut1

2019/01/22 14:51

手元に apache-tomcat 環境ないので動作確認できてないのですが、既存設定の ProxyPass の上に ProxyPass /.well-known/acme-challenge/ ! と1行追記して反映させた上で certbot-auto コマンド再試行でいけると思われます。違ったらすみません。
m1st

2019/01/22 15:22

丁寧に回答してくださりありがとうございました。 上記の回答でも同じエラーを吐いてしまいました。 ただ、ここまで原因が判明したのもset0gut1さんのおかげです。 粘り強く他の方法を試していこうと思います。 本当にありがとうございました!
set0gut1

2019/01/22 15:27

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

2019/01/22 15:44 編集

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

2019/01/22 15:51

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

0

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

投稿2019/01/22 01:32

scsi

総合スコア2840

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m1st

2019/01/22 11:13

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

2019/01/22 11:40

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

2019/01/22 13:50 編集

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問