問題タブ [sslengine]
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.
java - SSLEngine: ハンドシェイクが成功した後にアンラップすると、TLS パディング データが無効になる
非ブロックの socketChannel と SSLEngine を ssl サーバーとして使用しています。したがって、ハンドシェイクが成功した後、ソケットを読み取り(184バイト/ 384バイトが最初に読み取られます)、このバッファーをunwrapメソッドに渡します。unwrap メソッドは、次の例外をスローします。
しかし、最初にすべてのバイト (384/384) を読み取った場合、この例外は発生しません。
sslengine にアンラップするのに十分なバイトがない場合、bufferUnderflow ステータスが返されると思いました。
unwrap メソッドを呼び出すには、本当にすべてのバイトが必要ですか? はいの場合、非ブロッキングソケットのすべてのバイトを確実に読み取るにはどうすればよいですか?
編集: コード:
次に、非ブロッキング チャネルを使用して 184/384 バイトを読み取ります。
read = _socketChannel.read(バッファ);
buffer
次に、復号化する を渡します。
engine.unwrap engineRes=engine.unwrap(inNetData, outAppData); で例外がスローされています。
java - JAVA SSLENGINE: SSLEngine で bytebuffer レコードをラップ解除しようとしているときに、サポートされていないレコード バージョン Unknown-0.0 が発生しました
接続を処理するために、SSLEngine
オーバー JavaNIO
ブロック解除サーバー ソケットを使用しています。クライアントを正常にハンドシェイクし、小さなレコード セットをサーバーに渡すことができます。ただし、ファイルをサーバーtext/binary
に転送しようとすると、次のエラーが発生します。
ただし、このエラーの理由を見つけることができません。
以下は私のコードスニペットです
android - Android 4.0.4 での TLS1.2 の使用
SSL接続を行うときにAndroid 4.0.4がTLS1.2を使用できるようにする方法を知っている人はいますか?
この質問に対する回答を読みました: - Android (4.4.2) で SSLEngine に TLSv1.2 を使用させるには?
ただし、Google Play Services は、ハードウェアのために 4.0.4 に制限されている製品 Famoco NFC デバイスでは利用できません。
SSLEngine が TLS1.2 接続を確立するのに役立つライブラリはありますか?
java - 委任されたタスク (SSLEngine) で例外を検出する方法
SSLEngine
s を NIO と一緒に使用して、アプリケーションにノンブロッキング SSL 接続を提供します。ハンドシェイク中のある時点で (おそらく を受け取った後ServerHelloDone
)、SSLEngine
委任されたタスクを処理する必要があります。
だから私はgetDelegatedTask
それのrun
メソッドを呼び出して呼び出します。タスク自体が を呼び出しX509ExtendedKeyManager.getCertificateChain
、次にNullPointerException
. その例外は によってキャッチされHandshaker
、後でレポートするために保存されます。
checkTaskThrown
ただし、レポートは、メッセージが受信されたとき、またはメッセージが送信されるときにのみ呼び出されるプライベート メソッドを呼び出すことによって機能します。しかしgetCertificateChain
、正しく完了しなければ、送信するものは何もなく、相手も何も送信しないため、受信するものはありません。したがって、例外は非表示のままです。
どちらの側も進まないので、ライブロックがあります。そして、それを防止または検出する方法を見つけられませんでした。
- リフレクションを使用して呼び出す
checkTaskThrown
- タイムアウトのためにいくつかのタスク/タイマーを使用する
どちらも私の行きたい道ではない…
java - SSLEngine を使用する前に、リクエストのドメイン名を取得するにはどうすればよいですか?
返送に使用する証明書を決定する前に、Java でドメイン名を取得したいと考えています。どうすればそれを達成できますか?
どういうわけか自分でバイトを分析する必要がありますか? またはこれのためのライブラリがありますか?または、いくつかのJava SSL libがそれを行うことができますか?
関連記事 TLS クライアントから Server Name Indication (SNI) を抽出する hello
しかし、ホスト名を取得するためにJavaライブラリを使用したいと思っています。
java - Chrome、Firefox、または任意のブラウザーからすべて同じ公開鍵/証明書を使用して SSLEngine を作成する方法は?
Chrome にインストールされている証明書を使用して SSLEngine を作成する方法はありますか? デフォルトでは、かなりの数の機関の公開証明書がインストールされていることを覚えています。
chrome は私が知っているすべての Web サイトで動作するため、それはもう少し網羅的であり、chrome をインストールしてそれに依存する方が簡単だと思います。
ありがとう、ディーン
java - 共有 SSLContext オブジェクトの init() を再度呼び出したときの SSLEngine への影響
(基本的に、HTTPS 接続のために特定のポートでリッスンしているリスナー) が開始されたSSLContext
ときにロードするリアクター パターンの実装があります。TransportListener
次に、同じinit()
メソッドを再度呼び出します (リスナーのメソッドへのJMX呼び出しを介して)
トラスト ストアとの間で証明書を追加または削除したら。SSLContext
リスナーのダウンタイムを避けるために、をリロードする必要があります。
これが私が現在直面している問題です。
リクエストがリスナーに届き、接続が確立されたとします。SSLContext
応答がクライアントに返される前にオブジェクトをリロードすると、送信前にペイロードを暗号化する接続のSSLEngine
オブジェクトのプロセスに影響しますか?wrap
注: 同じSSLContext
オブジェクトがすべての SSLEngine に渡されていることを確認しました。SSLContext オブジェクトは、リスナーの開始時に他のいくつかのオブジェクトに渡されます。たとえば、この SSLContext オブジェクトを渡す必要がある接続プールがあります。したがって、新しい SSLContext オブジェクトを作成すると、接続プールである既存の接続が完全に切断されます。そのため、同じ SSLContext オブジェクトを使用しようとしています。
java - SSLEngine、委任されたタスクなし
私のプログラムは多くの接続を処理する必要があり、RAMの使用量を減らし、接続を増やし、パフォーマンスを向上させる目的でNIOで記述したため、JavaでSSLEngineと同じ機能を委任されたタスクなしで実行する方法はありますか? 、そのため、委任されたタスクを使用すると、目的が無効になり、プログラムはスレッドとしてさらに多くのRAMを使用し、大量にかなりのスペースを占有します.