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
は問題を報告しません。
そのため、ハンドシェイクは問題ないようですが、証明書が送信されていません。
握手は大丈夫ではありません。クライアントはClientHelloを送信してハンドシェイクを開始しましたが、何も返されませんでした:
|- ClientHello
---
SSL handshake has read 5 bytes and written 202 bytes
---
|- nothing useful from server
5バイトで何が返ってくるのかわかりませんが、TLSのようには見えません(TLSメッセージには短すぎます)。これは、表示した構成の一部からは確認できない、サーバーの構成の誤りの可能性があります。また、ミドルボックス(ファイアウォール、ロードバランサーなど)が接続を妨げている可能性もあります。予期されたサーバーに接続していない可能性もあります(つまり、example.com
は実際のサーバーに解決されません)。
最初にサーバー自体(つまりlocalhost
)を確認し、これが機能するかどうかを確認して、サーバーから離れた場所に移動することをお勧めします。また、パケットキャプチャを実行して、クライアントが受信した5バイトで何が見つかるかを確認することもできます。
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
同じエラーが発生しました。ローカルでhttps接続をテストし、ドメイン名を/ etc/hostsに追加することを提案します。例:127.0.0.1 yourdomain.comは、パケットが送信されないようにします。
次に、「リンク」を使用してローカル環境でhttps接続をテストします。問題がなければ、それはISPファイアウォールの問題または設定が原因です。ようやくローカルhttps接続に問題がなく、ISPに問題を投げてこの問題を解決しました。