問題タブ [tls1.3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ssl - TLS 1.3 の psk 接続では、TLS_AES_128_GCM_SHA256 暗号のみが機能しますか?
OpenSSL 1.1.1 11 Sep 2018を使用してUbuntu 1804でサーバーを実行しています。クライアントは、暗号としてPSK-AES256-CBC-SHAを使用した PSK 認証を使用してサーバーと通信します。
openssl-1.1.1c (Microsoft Visual Studio 2019 を使用してビルド) を使用して Windows でビルドされたクライアントを使用すると、クライアントを動作させることができません。
サーバー側では、次のようになります。
そしてクライアント側では、
openssl-1.1.1c\ssl\statem\extensions_clnt.cで次を見ました。
これは、TLS_AES_128_GCM_SHA256 のみがTLS1.3で動作するということですか? 私が見逃しているかもしれないものへのポインタはありますか? Windows プラットフォームからクライアント PSK 認証を使用する方法に関するチュートリアルは役に立ちます。
同じ PSK ID とキーを使用して、Linux ボックスからサーバーに接続できます。しかし、Windows ボックスからは接続できません。
java - Java 11 および 12 の SSL ソケットは、TLSv1.3 が有効になっている場合、handshake_failure エラーで失敗します。
Java 12 で SSL ベースの (HTTP 以外の) サーバーを開発しているときに、サーバーとクライアントの通信に予期しない問題が発生しました。接続は常に handshake_failure エラーで中断されていました。多くの努力の後 (最初は自分の証明書を非難していました)、ソケット レベルでの HelloWorld SSL クライアント/サーバー ペアのおかげで問題を切り分けることができました。 JDK ではデフォルトで。
これまでのところ、ハンドシェイク エラーを回避するための私の解決策は、TLSv1.3 を完全に (サーバー側で) 無効にすることですが、この解決策では満足できません。何が起こっているのかを理解したいと思います (JDK またはシステムのバグではなく、アプリケーションまたは環境のバグであると仮定します)。
以下にいくつかのコードを示します。誰かが私が間違っていることを確認して教えてもらえますか? よろしくお願いします。
これが私の構成です: OSX 10.14 (Mojave) 次のバージョンの Java でテストしました:
編集: Java 11 をテストに追加しましたが、このバージョンでも問題が発生します
- Java 8 (oracle64-1.8.0.181): ハンドシェイクの失敗なし
- Java 10 (oracle64-10.0.2 2018-07-17): ハンドシェイクの失敗なし
- Java 11 (openjdk バージョン "11.0.4" 2019-07-16): ハンドシェイクの失敗
- Java 12 (oracle64-12.0.1 2019-04-16): ハンドシェイクの失敗
- Java 12 (openjdk 12.0.2 2019-07-16): ハンドシェイクの失敗
(サーバーの証明書は、SSLアプリケーションをテストするために、サーバーのキーストアとクライアントのトラストストアにも必要です)
結果は次のとおりです(エラーが発生した場合):
@SvetlinZarev と @user207421 が示唆するように、 -Djavax.net.debug=ssl:handshake を有効にした出力の一部を次に示します。TLSv1.2 プロトコルを強制するとコードが機能するため、単純にデフォルトを使用した場合に何が起こっているかを確認することはより興味深いことです (ssl.setEnabledProtocols への呼び出しはコメント化されています)。
注: プロジェクトは個人的で実験的なものであり、サーバーの証明書は偽物であり、自己署名されており、クライアントのトラストストアに追加され (キーストアとトラストストアもダミーです)、とにかく公開されるため、公開することを恐れません。機密情報
クライアント側から:
そして、ここにサーバー側があります:
java-8 - TLS 1.3 をサポートする Azul の JSSE の使用方法
https://github.com/openjsse/openjsse
「OpenJSSE プロジェクトは、コードの変更を必要とせずに既存の Java 8 アプリケーションに TLS 1.3 のサポートを追加するために作成されました」
このプロジェクトを正確に使用するには?
現在、Java 8 用の AdoptOpenJDK ビルドを使用しています。
c# - .NET Core 3 は TLS 1.3 をサポートしていますか?
TLS 1.3 のみをサポートするプロキシを作成するために .NET Core 3.0 を使用しています。Tls13 = 12288 が SslProtocols で定義されていることがわかりました。しかし、私のテストでは、「クライアントとサーバーは共通のアルゴリズムを持っていないため、通信できません」という例外のみがスローされます。私の質問は、.NET Core 3.0 が現在 TLS 1.3 をサポートしているかどうかです。
Visual Studio Professional 2019 バージョン 16.3.0 プレビュー 3.0 を使用しています。私のプロジェクトは netcore3.0 です。