httpsを設定したら、次のようにエラーになった。
nginx やApacheでHTTPSを設定したら、エラーになった。再起動はうまくいく
"\x16\x03\x01\x02" というリクエストが解釈できないエラー。
==> access_log <== 192.168.11.1 - - [25/Mar/2022:18:26:23 +0900] "\x16\x03\x01\x02" 400 226 "-" "-" 192.168.11.1 - - [25/Mar/2022:18:28:30 +0900] "\x16\x03\x01\x02" 400 226 "-" "-" 192.168.11.1 - - [25/Mar/2022:18:28:34 +0900] "\x16\x03\x01\x02" 400 226 "-" "-" 192.168.11.1 - - [25/Mar/2022:18:28:39 +0900] "\x16\x03\x01\x02" 400 226 "-" "-"
ブラウザ上ではProtcol mismatchなど
ブラウザ上ではプロトコル・ミスマッチや、SSLエラーがでている。
原因
サーバーが、443 ポートでHTTPSをリッスンしていない。443ポートでHTTPをリッスンしている。
原因としては、HTTPサーバーが、443 ポートでHTTP通信しているために、openssl のセッションスタートのパケットが文字列処理されて、ファイルが見つからないなどのエラーになる。
"\x16\x03\x01\x02"は、SSL/TLS通信のネゴシエーション開始である。
httpd がHTTPSではなく、HTTPとして解釈しようとして、"\x16\x03\x01\x02"という命令がHTTPに存在しないので、エラーになる。
要は、httpd の設定が甘い。SSL/TLSの関係を見直す。
対策。
HTTPSをちゃんと設定する。
SSLの証明書
証明書と鍵をちゃんと設定する。
秘密鍵ファイルが間違ってると起動し無いはずですが。再度確認しましょう。
ポートとHTTPS設定を見直す
ちゃんと https / 443 でリッスンしていますか
nginx の設定のリッスンと、httpに注意する。
server { server_name example.com; listen 443 ssl http2 ; if ($scheme = http) { return 301 https://$server_name$request_uri; } }
この設定ファイルはミスを誘発しやすいので、http→httpsリダイレクトは、設定を分ける。
Apache 2.4.8 以降で中間証明書を使ってませんか
Apache2.4.8 で SSLCertificateChainFile を使ってませんか。
SSLCertificateChainFileは deprecated です
apache では SSLCertificateChainFile は使わなくなりました。
中間証明書を末尾に追加します。
cat cert.pem chain.pem > fullchain.pem