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

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

ただいまの
回答率

90.84%

  • nginx

    776questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

  • Let's Encrypt

    28questions

Let's encryptの証明書取得(認証)が失敗するようになってしまった

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 183

belgh

score 2

 Let's encryptの証明書取得(認証)が失敗する

証明書取得が失敗するようになりました。
毎月1回実行しているcron「certbot renew」が失敗しているのに気が付き、
応急処置的に行った
certbot certonly --webroot -w /srv/www/www.dummy.net/ -d www.dummy.net
も、環境構築時には成功していたのに失敗するようになっていました。

 発生している問題・エラーメッセージ

certbot certonly --webrootで下記結果となります。

> certbot certonly --webroot -w /srv/www/www.dummy.net/ -d www.dummy.net

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Cert is due for renewal, auto-renewing...
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for www.dummy.net
Waiting for verification...
Cleaning up challenges
Failed authorization procedure. www.dummy.net (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: The key authorization file from the server did not match this challenge [xKeqEHuUlchL7M6L0c-B9FWmfNsa3rGx80yIC3KMisc.f4UUZHSY0vEcB-GacmvQTf7FAgm4tXCXc7fYdVpoy4o] != [http://www.dummy.net/.well-known/acme-challenge/xKeqEHuUlchL7M6L0c-B9FWmfNsa3rGx80yIC3KMisc]

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

   Domain: www.dummy.net
   Type:   unauthorized
   Detail: The key authorization file from the server did not match
   this challenge
   [SIqU8-wiN-yA4Vc39ArEUpHqyBamFQgc6o8xcKNnFvI.f4UUZHSY0vEcB-GacmvQTf7FAgm4tXCXc7fYdVpoy4o]
   !=
   [http://www.dummy.net/.well-known/acme-challenge/SIqU8-wiN-yA4Vc39ArEUpHqyBamFQgc6o8xcKNnFvI]


certbot renewの方は、試行錯誤しすぎて下記エラーが出るようになってしまっています。

> certbot renew

urn:acme:error:rateLimited :: There were too many requests of a given type :: Error creating new authz :: too many failed authorizations recently: see https://letsencrypt.org/docs/rate-limits/. Skipping.


certbot certonlyの方もリクエストしすぎエラーかとも思ったのですが、エラーメッセージは違うように見えます。

 該当のソースコード

httpディレクティブ内で下記をincludeしています。
意図としては
「httpはhttpsに転送するが、Let'sencryptが要求するURLだけはhttpのまま応答する」
となります。

server {
    # トップページ
    listen 443 ssl http2;
    server_name www.dummy.net;
    ~以下略~
}
server {
    # 未定義のpathは無応答とする
    listen 443 ssl;
    listen [::]:443 ssl http2;
    server_name _;
    ssl_certificate /etc/letsencrypt/live/www.dummy.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.dummy.net/privkey.pem;
    return 444;
}
server {
    # httpはssl証明書認証以外はhttpsに飛ばす
    listen 80;
    server_name www.dummy.net;
    access_log /srv/www/www.dummy.net/logs/access.log main;
    error_log /srv/www/www.dummy.net/logs/error.log warn;
    location /.well-known/acme-challenge/ {
        root /srv/www/www.dummy.net/;
        return 200 http://$host$request_uri;
    }
    location / {
        root /srv/www/www.dummy.net/static/;
        return 301 https://$host$request_uri;
    }
}

 試したこと

・ブラウザから下記にアクセス
http://www.dummy.net/.well-known/acme-challenge/xKeqEHuUlchL7M6L0c-B9FWmfNsa3rGx80yIC3KMisc
→httpのページが表示され、URLが文字列として返ってきた。

http://www.dummy.net/somewhere
→httpsサイトに転送され、証明書がないのでブラウザ側で「このサイトは安全ではありません」エラーとなった。

nginxの振り分けは意図通りに動作しているように見えました。

 補足情報(FW/ツールのバージョンなど)

nginx version: nginx/1.12.2
certbot 0.24.0

以上、よろしくお願いいたします。orz

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

check解決した方法

0

原因がわかりました。

結論から書くとnginxのconfのせいでした。

    location /.well-known/acme-challenge/ {
        root /srv/www/www.dummy.net/;
        return 200 http://$host$request_uri;** ←これが原因
    }

certbotがリクエストする「/.well-known/acme-challenge/」のpathをリクエストそのままにreturnするという設定にしていたつもりでした。
が、内部的に何をしてるのか不明ですが、これがダメだったようです。

一時的にhttpsへの転送も消して、rootをcertbotに指定した/srv/www/www.dummy.net/にしたらすんなり通りました。

公式掲示板
Letsencrypt-vesta Client Error - The key authorization file from the server did not match

同じようなことで悩んでいる人がおり、斜め読みの意訳を書くと
「比較する認証keyが一致してないじゃん。サーバで転送とかしてない?」
とのこと。

確かに私のログはそこがおかしく、

[SIqU8-wiN-yA4Vc39ArEUpHqyBamFQgc6o8xcKNnFvI.f4UUZHSY0vEcB-GacmvQTf7FAgm4tXCXc7fYdVpoy4o]
!=
[http://www.dummy.net/.well-known/acme-challenge/SIqU8-wiN-yA4Vc39ArEUpHqyBamFQgc6o8xcKNnFvI]

keyがkey形式ですら無くURLになってしまっていました。
多分certbotがなにか処理をしており、nginxでreturnするとそれが行われないのだと思います。

 上記を踏まえたconfの修正内容

    location ^~ /.well-known/acme-challenge/ { # 1
        allow all; # 2
        default_type text/plain; # 3
        root /srv/www/www.dummy.net/; 
    }
    location / { # 4
        root /srv/www/www.dummy.net/static/;
        return 301 https://$host$request_uri;
    }
  1. 「/.well-known/acme-challenge/」のパターンマッチ演算子は「^~」とする。
    「^~」は最優先で判定され、マッチすると他のパターンマッチは行われない。
  2. Let's encryptのサーバは海外なので、海外IPを弾く設定をしている場合に必要。
  3. すみませんよくわかりません…。参考サイト見てのおまじない。わかる方教えてください。
  4. 「httpにアクセスされたらhttpsに転送する」処理。
    修正前はlocation未指定で書いていたが、「/」のパターンマッチ内とするとこで、「^~」との振り分けができる。
    これで1と合わせて、certbot認証時のみリダイレクトされなくなる。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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

  • nginx

    776questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

  • Let's Encrypt

    28questions