19

パブリックにアクセスできるサーバーでLet's Encrypt 証明書を構成しようとしています。当初、サーバーはルーターの後ろに隠れていましたが、ポート 80 と 443 を転送しました。

証明書はインストール プロセスの大部分を完了したようですが、次のメッセージで失敗しますFailed to connect to host for DVSNI challenge

完全なスタック トレース:

Updating letsencrypt and virtual environment dependencies......
    Requesting root privileges to run with virtualenv: sudo /bin/letsencrypt certonly --standalone -d example.net -d www.example.net
    Failed authorization procedure. example.net (tls-sni-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Failed to connect to host for DVSNI challenge

IMPORTANT NOTES:
 - The following 'urn:acme:error:connection' errors were reported by
   the server:

   Domains: example.net
   Error: The server could not connect to the client to verify the
   domain

どんなサポートでも大歓迎です!

私は解決策を求めて他の場所を見回しましたが、あまり運がありませんでした。他のほとんどの同様の状況は、ポート 443 を転送することで解決されましたが、現在このポートで実行されているサービスはありませんが、このポートは既に転送されて開いていると確信しています。

違いはありませんが、この証明書を Raspberry Pi の Node JS で使用するように構成しようとしています。

4

6 に答える 6

12

私はついに何が起こっているのかを理解しました。--manual私は、フラグが認証プロセスを対話的に通過することを発見しました。

プロセスの各段階で、次のようなプロンプトが表示されます。

Make sure your web server displays the following content at
http://www.example.net/.well-known/acme-challenge/twJCKQm9SbPEapgHpyU5TdAR1ErRaiCyxEB5zhhw0w8 before continuing:

twJCKQm9SbPEapgHpyU5TdAR1ErRaiCyxEB5zhhw0w8.t7J7DDTbktMGCCu2KREoIHv1zwkvwGfJTAkJrnELb4U

If you don't have HTTP server configured, you can run the following
command on the target server (as root):

mkdir -p /tmp/letsencrypt/public_html/.well-known/acme-challenge
cd /tmp/letsencrypt/public_html
printf "%s" twJCKQm9SbPEapgHpyU5TdAR1ErRaiCyxEB5zhhw0w8.t7J7DDTbktMGCCu2KREoIHv1zwkvwGfJTAkJrnELb4U > .well-known/acme-challenge/twJCKQm9SbPEapgHpyU5TdAR1ErRaiCyxEB5zhhw0w8
# run only once per server:
$(command -v python2 || command -v python2.7 || command -v python2.6) -c \
"import BaseHTTPServer, SimpleHTTPServer; \
s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); \
s.serve_forever()"

Press ENTER to continue

私が発見したように、プロセスはルート自体として実行されているにもかかわらず、チャレンジ サーバー自体を起動する権限を持っていませんでした。確かに、これは API のバグかもしれません。

プロンプトでスクリプトを直接実行すると、次のエラーが発生します。

$(command -v python2 || command -v python2.7 || command -v python2.6) -c \
> "import BaseHTTPServer, SimpleHTTPServer; \
> s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); \
> s.serve_forever()"

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/SocketServer.py", line 419, in __init__
    self.server_bind()
  File "/usr/lib/python2.7/BaseHTTPServer.py", line 108, in server_bind
    SocketServer.TCPServer.server_bind(self)
  File "/usr/lib/python2.7/SocketServer.py", line 430, in server_bind
    self.socket.bind(self.server_address)
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 13] Permission denied

ただし、root として実行すると (プロンプト自体に示されているように)、サーバーが正しく起動され、外部サーバーがチャレンジを完了するためにクエリを実行したときに監視できました。

sudo $(command -v python2 || command -v python2.7 || command -v python2.6) -c "import BaseHTTPServer, SimpleHTTPServer; \
s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); \
s.serve_forever()"

66.133.109.36 - - [08/Jan/2016 21:25:10] "GET /.well-known/acme-challenge/SZ88SorxBGXBtSZCTn4FX2g7u5XjnPFOOV3f5S5DuXB HTTP/1.1" 200 -
66.133.109.36 - - [08/Jan/2016 21:25:10] "GET /.well-known/acme-challenge/twJCKQm9SbPEapgHpyU5TdAR1ErRaiCyxEB5zhhw0w8 HTTP/1.1" 200 -

多くのことがチャレンジの失敗を妨げている可能性があり、生成されたサーバーがバックグラウンドで静かに失敗していたため、このエラーの診断にはしばらく時間がかかりました。

于 2016-01-09T08:27:31.800 に答える
8

サイトの前で Cloudflare DNS を使用している場合は、更新が完了するまで一時的に、DNS A、AAAA レコードがサイトを直接指すようにしてください。

于 2016-03-18T20:11:13.247 に答える
2

私はこれを数時間戦い、ログに同じ出力を残しました. このページのすべての推奨事項をフォローアップしました. 私は自分の答えに出くわしただけです。別の webconfig からいくつかのコードを貼り付けましたが、その中に既に<virtual host _._._._:443>セクションがありました。その 443 セクションを削除した後、sudo certbot-auto --apache -d example.comはエラーなしで実行され、作業サイトができました。

私は自分の経験からのみ結論を導き出しています。ポート 80 の仮想ホストのみがあることを確認してください。私が読んだドキュメントのどこにもこの問題について言及していませんが、certbot は、既に443 仮想ホスト セクション。

于 2017-01-05T19:26:01.373 に答える
1

これはもう皆さんチェックされていると思います。更新プロセス中に同じエラーが発生しました。トラフィックを 443 から 8443 にリダイレクトしました (iptables を使用)。解決策は、iptables からエントリを削除し、Tomcat を停止してから、更新プロセスを実行することでした。スクリプトは次のようになります。

/etc/init.d/tomcat7 stop
iptables -t nat -D PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8443

$letsencryptdir/letsencrypt-auto renew --standalone --standalone-supported-challenges tls-sni-01 --renew-by-default --email <my_email> --verbose --text  --agree-tos

iptables -t nat -I PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8443
/etc/init.d/tomcat7 start
于 2016-05-05T19:18:09.467 に答える
0

試したときに同じエラーが発生しました:

./letsencrypt-auto --apache  -d example.com -d www.example.com

しかし、それは次のように機能しました:

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

その後、apache .conf ファイル (default-ssl.conf) で証明書パスを変更し、apache を再起動する必要があります。

于 2016-05-11T22:02:08.223 に答える