web-dev-qa-db-ja.com

LetsEncrypt SSLエラー-SSLルーチン:ssl3_get_record:間違ったバージョン番号

LetsEncryptから新しい証明書を取得しました。私のVirtualHost構成は次のように設定されています。

<VirtualHost *:80>
    ServerName example.com
    Redirect 301 / https://example.com/
</VirtualHost>

<VirtualHost *:443>
    Servername example.com
    DocumentRoot /var/www/example.com/wav
    ErrorLog /var/log/Apache2/example.com/www/error.log

    SSLEngine On
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>

Opensslでこれを確認しようとすると:

openssl s_client -connect example.com -port 443

私は以下を得ます:

CONNECTED(00000003)
140229655213824:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../ssl/record/ssl3_record.c:252:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 5 bytes and written 202 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
    SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1541086087
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no

そのため、ハンドシェイクは問題ないようですが、証明書が送信されていません。

Apacheログはエラーを報告しないことを指摘する価値があります-いつものように-「起動中/シャットダウン中」のメッセージ。 Apache2ctl configtestは問題を報告しません。

5
Zakalwe

そのため、ハンドシェイクは問題ないようですが、証明書が送信されていません。

握手は大丈夫ではありません。クライアントはClientHelloを送信してハンドシェイクを開始しましたが、何も返されませんでした:

                                            |- ClientHello
                                           ---
SSL handshake has read 5 bytes and written 202 bytes
                      ---
                       |- nothing useful from server

5バイトで何が返ってくるのかわかりませんが、TLSのようには見えません(TLSメッセージには短すぎます)。これは、表示した構成の一部からは確認できない、サーバーの構成の誤りの可能性があります。また、ミドルボックス(ファイアウォール、ロードバランサーなど)が接続を妨げている可能性もあります。予期されたサーバーに接続していない可能性もあります(つまり、example.comは実際のサーバーに解決されません)。

最初にサーバー自体(つまりlocalhost)を確認し、これが機能するかどうかを確認して、サーバーから離れた場所に移動することをお勧めします。また、パケットキャプチャを実行して、クライアントが受信した5バイトで何が見つかるかを確認することもできます。

1
Steffen Ullrich

sslのファイルタイプも設定します。これは機能していることが確認されています。FilesMatchセクションを参照してください。それがない場合、このエラーが表示されます。

SSLEngine on
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
SSLCertificateFile /etc/letsencrypt/live/mysite.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mysite.net/privkey.pem
Include /etc/letsencrypt/options-ssl-Apache.conf
SSLHonorCipherOrder on
SSLProtocol all -SSLv2 -SSLv3
#SSLCipherSuite EECDH+AES:EDH+AES:-SHA1:EECDH+RC4:EDH+RC4:RC4-SHA:EECDH+AES256:EDH+AES256:AES256-SHA:!aNULL:!eNULL:!EXP:!LOW:!MD5
#SSLCipherSuite "AES256-SHA"
SSLCipherSuite HIGH:!aNULL:!MD5
0
bwolmarans

同じエラーが発生しました。ローカルでhttps接続をテストし、ドメイン名を/ etc/hostsに追加することを提案します。例:127.0.0.1 yourdomain.comは、パケットが送信されないようにします。

次に、「リンク」を使用してローカル環境でhttps接続をテストします。問題がなければ、それはISPファイアウォールの問題または設定が原因です。ようやくローカルhttps接続に問題がなく、ISPに問題を投げてこの問題を解決しました。

0
Ryan Ye