2

クライアント認証で SSL を必要とするサービスを呼び出さなければなりません。p12 クライアント証明書 (プライベートおよびパブリック) とパブリック リモート サーバー証明書があります。

Java クライアント: リモート証明書は jks にあり、サービスは正常に動作します。

c#: 同じ p12 で認証を試み、pem (keytool を使用して jks からエクスポート) を LocalComputer Personal フォルダーにロードしましたが、例外が発生しました:

 The remote certificate is invalid according to the validation procedure.

サーバー証明書の詳細を調べたところ、チェーンを完了できないことがわかりました。と思ったのは、証明書の発行者の範囲に署名の権利が含まれていないからです。

これが正しければ、なぜ Java が動作するのでしょうか?
これが正しくない場合、C# が機能しないのはなぜですか?
C# にサーバーからの証明書を有効なものとして扱わせるにはどうすればよいですか?
Windows では、常に証明書スナップインや LocalComputer などを通過する必要がありますか? それともクライアント アプリケーションに信頼を埋め込むことができますか?

アップデート:

これはWeb サービス固有の問題ではなく、SSL の問題であるため、タイトルを変更し、 Web サービスタグを削除しました。so:
タイトル: Java では機能するが C# では機能しないクライアント証明書を使用した WS 呼び出し
現在のタイトル: Java では機能するが C# では機能しない証明書を使用した SSL

これで、Java アプリケーションを呼び出して C# システムを動作させることができましたが、あまり好きではありません。
さまざまな環境で同じシステムに設定された同じ証明書を使用してアプリケーションをテストしたところ、信頼チェーンに違反しているため、C# クライアントは SSL 経由で接続できませんが、Java はそれを無視すると述べました。

だから私の最後の質問は、Java は SSL 接続を設定するときに信頼チェーン全体の完全性を無視するのですか?

4

1 に答える 1

-1

通常、次のいずれかが当てはまるために発生します。

  • 証明書は自己署名されており、信頼できる証明書として追加されていません。
  • 証明書の有効期限が切れています。
  • 証明書は、マシンにインストールされていないルート証明書によって署名されています。
  • 失効リストがプローブされますが、見つからないか使用できません。

サーバーの証明書に関する情報を取得して、クライアントに特定の証明書をインストールする必要があるかどうかを確認してください。

于 2012-11-16T13:17:19.290 に答える