それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

https がエラーになって "\x16\x03\x01\x02" になる場合

httpsを設定したら、次のようにエラーになった。

nginx やApacheHTTPSを設定したら、エラーになった。再起動はうまくいく

"\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通信のネゴシエーション開始である。

httpdHTTPSではなく、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