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

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

ただいまの
回答率

90.53%

  • HTTPS

    308questions

    HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

Let's encryptによるHTTPS化がうまくいかない

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 3,680

mulberryfields

score 758

Let's encryptを用いて、httpsにしようと考えました。
サーバーは、さくらVPSで、OSは、Ubuntu16.04です。
サイトはNginxを用いて動かしています。

そのため、下記を参考にしようとしました。
https://certbot.eff.org/#ubuntuxenial-nginx

$ sudo apt-get install letsencrypt
は、うまくいきました。

しかし、

$ sudo letsencrypt certonly --webroot -w /var/www/html -d example.com -d www.example.com


を実行すると、

Failed authorization procedure. www.example.com (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://www.example.com/.well-known/acme-challenge/W7nzNEIKJXgIMa3pHZPTbb_9ZoyLmESqRuChaGuIWZU: "<h1>Not Found</h1><p>The requested URL /.well-known/acme-challenge/W7nzNEIKJXgIMa3pHZPTbb_9ZoyLmESqRuChaGuIWZU was not found on ", example.com (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://example.com/.well-known/acme-challenge/EY6TbDFYmuBbiK_j-uXLs8gusaOD5hafNjt3e1RN9zg: "<h1>Not Found</h1><p>The requested URL /.well-known/acme-challenge/EY6TbDFYmuBbiK_j-uXLs8gusaOD5hafNjt3e1RN9zg was not found on "

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

   Domain: www.example.com
   Type:   unauthorized
   Detail: Invalid response from http://www.example.com
   /.well-known/acme-
   challenge/W7nzNEIKJXgIMa3pHZPTbb_9ZoyLmESqRuChaGuIWZU: "<h1>Not
   Found</h1><p>The requested URL /.well-known/acme-
   challenge/W7nzNEIKJXgIMa3pHZPTbb_9ZoyLmESqRuChaGuIWZU was not found
   on "

   Domain: example.com
   Type:   unauthorized
   Detail: Invalid response from http://example.com/.well-
   known/acme-challenge/EY6TbDFYmuBbiK_j-uXLs8gusaOD5hafNjt3e1RN9zg:
   "<h1>Not Found</h1><p>The requested URL /.well-known/acme-challenge
   /EY6TbDFYmuBbiK_j-uXLs8gusaOD5hafNjt3e1RN9zg was not found on "

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

というエラーが出てしまいます。

なお、
/etc/nginx/sites-available/default

には、

upstream example{
    server 127.0.0.1:8000;
}

server{
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    access_log /var/log/nginx/localhost.access_log;
    root /var/www/html;
    server_name localhost;
    location / {
        proxy_set_header Host $host;
        proxy_pass http://hinaya_web;
      }
}


となっていたので、

-w /var/www/html

で良いのかと思いました。

どこが悪いかお分かりの方、ご教示頂ければ幸いです。

よろしくお願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

コマンドやエラーメッセージが入力/表示されたものそのままだと仮定して回答します。

コマンドの-d example.com -d www.example.comの部分はあなたのドメインに変えてください。

$ sudo letsencrypt certonly --webroot -w /var/www/html -d example.com -d www.example.com


と入力した場合、example.comwww.example.comの証明書を取得しようとします。

その際、Let's encryptはexample.comwww.example.comがあなたのドメインであることを
確認します。(Let's encryptにはドメインが真正なものであることを証明する責任があるため)
しかし、example.comwww.example.comはあなたのドメインではないため
この確認が成功せず、エラーとなります。

なお、確認方法はざっくりと言えば

  1. コマンドは-w /var/www/htmlに確認用のファイルを置く (/var/www/htm/.well-known/acme- challenge/W7nzNEIKJXgIMa3pHZPTbb_9ZoyLmESqRuChaGuIWZU)
  2. コマンドはLet's encryptにwww.example.comの証明書を要求する。
    ここで、1で置いたファイルの情報をLet's encryptに通知する。
  3. Let's encryptは2で受け取った情報を元に
    http://www.example.com/.well-known/acme-challenge/W7nzNEIKJXgIMa3pHZPTbb_9ZoyLmESqRuChaGuIWZUにアクセスする。
  4. 3のアクセスでドメインが正しいことを確認できれば証明書が発行される。

という流れです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/02/01 15:37

    ご回答いただきありがとうございました。
    お礼遅くなり申し訳ありません。
    まだ解決できていないのですが、どうやら、Nginxの設定(location の設定)のどこかがおかしそうだという所まで分かっています。
    時間が経ってしまったので、取り急ぎお礼のご連絡をさせて頂きますm(__)m

    キャンセル

同じタグがついた質問を見る

  • HTTPS

    308questions

    HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。