2

現在、Windowsサービスとしてインストールされている.Netアプリケーションが、WindowsServer2008で実行されているApacheTomcat7で実行されているJavaで記述された別のアプリケーションと通信する際に問題が発生しています。

.NETアプリはWindowsサービスとして実行されており、TcpListenerを使用して、ローカルマシンのパーソナルストアからのサーバー証明書(ローカルマシンの適切な証明書ストアにルート証明書と中間証明書が存在する)を使用して保護され、Javaに提示されます。次に、接続を保護するためのクライアント証明書を提供することになっているアプリケーション。

このプロセスで使用されるすべての証明書は、当社のCAから作成され、Javaアプリケーションでは、参照しているキーストアとトラストストアに証明書が追加されています。

Javaアプリケーションが.NETサービスへの接続を開こうとすると、接続が失敗します。

.Netアプリケーションでトレースをオンにしたところ、「リモートサーバーが証明書を提供しなかった」ことが原因であると報告されました。次に、Apache TomcatサービスのSSLデバッグをオンにしました。サーバー(この場合は.Net Windowsサービス)が、マシンにあるすべてのルート証明書を渡すことによってクライアントに証明書を要求する段階に達しているようです。トラストストアですが、私が追加したルート証明書はルート証明書のリストに表示されません。

ローカルマシンのトラストストアで証明書を確認できるので、次に何をすべきかわかりません。Javaアプリケーション内の認証局のリストに自分のルート証明書が表示されないようにするにはどうすればよいですか?

4

1 に答える 1

1

私の大学の 1 つで、使用可能なルート証明書が多数あるため、信頼されたルート証明書のリストが切り捨てられたというエントリが Windows イベント ログに見つかりました。不要なものをすべて削除すると、機能しました。

更新: Windows イベント ログからのメッセージは次のようになります。

クライアント認証を要求すると、このサーバーは信頼できる認証局のリストをクライアントに送信します。クライアントは、このリストを使用して、サーバーによって信頼されているクライアント証明書を選択します。現在、このサーバーは非常に多くの認証局を信頼しているため、リストが長くなりすぎています。したがって、このリストは切り捨てられました。このマシンの管理者は、クライアント認証で信頼されている認証局を確認し、実際に信頼する必要のない認証局を削除する必要があります。

参照: http://support.microsoft.com/kb/2801679

于 2013-01-25T15:51:11.280 に答える