3

私は現在、Java で SSL クライアントに取り組んでおり、クライアント認証を必要とするサードパーティ サーバーとの https 接続を確立する必要があります。サーバー担当者は、クライアント証明書とサーバー証明書の両方に署名するために使用される信頼できるルート CA 証明書を提供してくれました。この証明書を自分の側のトラストストアに入れました。サーバー関係者は、クライアント証明書を検証するために使用するこのルート CA 証明書も持っています。

サーバーとの SSL 接続を確立しようとすると、サーバーが証明書を送信するとハンドシェイクが正常に行われ、クライアントがそれを正常に検証できることがわかります。ただし、「Certificate Request」メッセージの一部として、サーバーは「Cert Authorities」パラメーターでルート CA 証明書を返しません。このため、クライアントはクライアント証明書をサーバーに送り返さず、ハンドシェイクは失敗します。

WSDL スタブを使用して標準の Java コードを作成しています。wsdl2Java ant タスクによって生成された wsdl スタブを利用しています。

だから私の質問は: サーバーがクライアント認証を要求するときに空の「証明書機関」リストを送信する場合でも、Java クライアントに事前設定されたクライアント証明書をサーバーに送信させることはできますか? (TLS RFCを読んだところ、サーバーがこのような空のリストを送信することは合法であることがわかりました。この場合、クライアントは適切と思われる証明書を返送する可能性があります。まったく同じ動作を達成しようとしています)。

4

3 に答える 3

1

これには意味がありません。サーバーはまだそれを受け入れません。少なくともそれを受け入れるべきではありません。一般的に使用されている SSL 実装を使用している場合は、受け入れません。また、彼らが独自の SSL 実装を微調整した可能性はまったくありません。

問題はサーバー側にあります。構成が間違っています。クライアント側で修正することはできません。CertificateRequestそのルート CA 証明書、またはその署名者の 1 人がメッセージで送信されているはずです。

編集この回答はTLS 1.0に適用されます。これは、 TLS 1.1およびその後継によって廃止されました。

于 2013-05-28T21:31:42.547 に答える
1

同様の問題が発生しましたが、興味深いことに、私たちが使用するライブラリは spring-ws と spring-ws-support です。そこで HttpsUrlMessagenSender Bean を作成して SOAP 呼び出しを行うことができます。カスタム KeyStoreFactoryBean を設定することで、jks キーストア(client cert) の場所。しかし、ここで述べたのと同じ問題があります。

ただし、デフォルトの動作 (HttpsUrlMessagenSender Bean なし) を使用し、java.net.ssl.keyStore を介してキーストアを渡すと、証明書機関リストが空の状態で機能し、クライアント証明書が送信されます。

jvm 引数が異なる動作を引き起こしたようです。一部のソフトウェアには、これに対処するためのフラグさえありますhttp://techcommunity.softwareag.com/web/guest/pwiki/-/wiki/Main/Debugging+TLS+SSL+connections+in+Integration+Server

于 2019-08-10T14:53:12.890 に答える