web-dev-qa-db-ja.com

一部のユーザーのみのERR_SSL_PROTOCOL_ERROR(nodejs、express)

エクスプレスサイトにアクセスしようとすると、Chromeで一部(すべてではない)のユーザーのみがERR_SSL_PROTOCOL_ERRORを受信します。このエラーは表示されないため、デバッグするのが面倒です。

私はプロバイダー(1&1)からダウンロードしたPFXファイルを使用してhttpsサーバーを作成しています:

var options = {
  pfx: fs.readFileSync('./mysite_private_key.pfx'),
  passphrase: 'MYPASSPHRASE',
};
https.createServer(options, app).listen(443); 

https://whatsmychaincert.com は、チェーンは正しいがハンドシェイクについて不平を言うことを私に伝えます:

[mysite]は正しいチェーンを持っています。

[mysite]:TLSハンドシェイクエラー:エラー:14077438:SSLルーチン:SSL23_GET_SERVER_HELLO:tlsv1アラートの内部エラーSSL Labsが問題の原因を教えてくれる可能性があります

私はこれをググって成功しませんでした、誰が問題が起こり得るのか知っていますか?タイ。

4
jbob77435

現在、サーバー(1&1など)が安全に設定されている場合、サポートされているのはtls v1.2とtls v1.3だけです。

これをデバッグする方法:

  • scanSSL Labs Test を使用してサイトをサポートするか、サポートされている暗号を確認するか、nginx/Apache設定で確認してください

  • tail -fサーバーログ、特にcatchall/other_vhostsログファイル。サーバーが名前を決定できない場合、sslプロトコルエラーがサイトログと一般的なcatchallログに含まれる可能性があるため

  • updateユーザーに試してみてくださいchrome少なくともtls 1.2をサポートする

    chromeには、暗号の動作を変更するためのコマンドラインスイッチがいくつかあります。

    • --ssl-version-max SSL/TLSの最大バージョンを指定します( "tls1.2"または "tls1.3")。 ↪
    • --ssl-version-min SSL/TLSの最小バージョンを指定します( "tls1"、 "tls1.1"、 "tls1.2"、または "tls1.3")。 ↪

危険区域:

  • 最後の手段として、nginx-config(ssl_ciphersディレクティブ)socat OR(最後の手段) socat2 のように、クライアントがサポートしているバージョンを確認します。

本番環境ではtls v1.2以下のすべてを無効にすることを忘れないでください

失敗したハンドシェイクの考えられる原因は、中間証明書の欠如、_ tls.createSecureContextcaオプションです。プロバイダーのWebサイトで公開する必要があります。

お役に立てれば。

0
Daniele Ricci