1. ホーム
  2. ジャワ

WebSocketにsslを追加する際の問題点

2022-03-15 16:28:32
<パス

WebSocketにsslを追加する際の問題点

[toc]です。



メモをする

エラーログと対処法

からエラーをコピーして、そのページで探してみてください。

// System.setProperty("javax.net.debug", "all") を使用します。

問題1:javax.net.ssl.SSLHandshakeException: 適切なプロトコルがありません

io.netty.handler.codec.DecoderException: javax.net.ssl.SSLHandshakeException.DecoderException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate).



原因:javax.net.ssl.SSLHandshakeException: 適切なプロトコルがない(プロトコルが無効、または暗号スイートが適切でない)



io.netty.handler.codec.DecoderException: javax.net.ssl.SSLHandshakeException.DecoderException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate).

シナリオ:パーミッションの問題

しばらく誤魔化した後、ようやく jdk 1.8 のせいでSSLがパーミッションを呼び出すことに問題があることに気づきました。



解決方法 jdk 1.8 のインストールディレクトリを探し、libsecurity の java.security の下にある jdk を探します。対応する SSLv3 を見つけて削除し、プロジェクトを再起動すれば問題ありません。(SSLv3を削除すると、SSLコールを許可することになります。)

問題 2: protocol_version, ERR_CERT_COMMON_NAME_INVALID, ERR_CERT_AUTHORITY_INVALID

原因:javax.net.ssl.SSLException: 致命的な警告を受け取りました: protocol_version



io.netty.handler.codec.DecoderException: javax.net.ssl.SSLException: 致命的な警告を受け取りました: protocol_version



原因:javax.net.ssl.SSLException: 致命的な警告を受け取りました: protocol_version

シナリオ:ウェブクライアントが証明書を信頼する必要がある

  • err_cert_common_name_invalid
  • err_cert_authority_invalid
  • 解決方法



    1. クローム訪問 chrome://flags/#show-cert-link
    2. ローカルホストから読み込まれたリソースに対して無効な証明書を許可するを検索します。
    3. 有効に変更する
  • ソリューションのソース https://jingyan.baidu.com/article/636f38bb64f3c0d6b9461046.html

内部エラー

問題 3: io.netty.handler.ssl.NotSslRecordException: SSL/TLS レコードではありません。

io.netty.handler.ssl.NotSslRecordException: SSL/TLSレコードではありません。

シナリオ

クライアントで Pipeline.addLast("ssl", new SslHandler(sslEngine))を実行します。

問題4:PKIXパスの構築に失敗、SSLEngineの一般的な問題、要求されたターゲットへの有効な認証パスを見つけることができない

018-08-17 15:35:55.250 DEBUG io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker13 - WebSocket バージョン 13 クライアントハンドシェイクキー:txOihqp44yIRBkIiOqYQzA==, 予想される応答: cR25d0JOMq6RBX9igrELEfGejKA= - ウェブソケットバージョン 13 クライアントハンドシェイクキー:txOihqp44yIRBkIiOqYQzA==, 予想される応答:cR25d0JOMq6RBX9igrELEfGejKA= - webSocket version 13



2018-08-17 15:35:55.820 INFO com.lizhaoblog.server.channel.websocket.WebSocketClientHandlerTest - Exceptionが発生しました。



io.netty.handler.codec.DecoderException: javax.net.ssl.SSLHandshakeException: 一般的なSSLEngineの問題

原因:javax.net.ssl.SSLHandshakeException: 一般的なSSLEngineの問題



原因:javax.net.ssl.SSLHandshakeException.SSLHandshakeExceptionが発生しました。SSLEngine の一般的な問題



原因:sun.security.validator.ValidatorException: PKIX パスの構築に失敗しました: sun.security.provider.certpath. SunCertPathBuilderException: 要求されたターゲットに対する有効な認証パスを見つけることができません。



... 26件以上



原因: sun.security.provider.certpath.SunCertPathBuilderException: 要求されたターゲットに対する有効な証明書パスが見つかりません。



at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)



at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)



at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)



at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:392)



... 32件以上

原因: sun.security.provider.certpath.SunCertPathBuilderException: 要求されたターゲットへの有効な証明書パスが見つかりません。

シナリオ

  • 自己生成した証明書、検証されていない、jdk に認識されていない



    • サーバーの起動
    • SSLCreリクエストを使用してjssecacertsを生成します。
    • Replace jssecacerts with cacerts under D:\Program FilesJavajdk1.8.0_171‡jreibsecurity
    • 名前を変更することを忘れないために



      "`