チームプロジェクトとして、C#クライアントからJava 6.5 SSLサーバーに接続する必要がありますが、stream.AuthenticateAsClient行に到達するとハングします。SSLを使用してJavaサーバーに接続するC#クライアント
C#の私はhttps://mail.google.com
のようなものに接続し、mail.google.com
にMyCNfield
を設定した場合、それは正常に動作しますので、私はそれがJava側だと思うコード
public static void connect(string server, Int32 port)
{
try
{
client = new TcpClient(server, port);
stream = new SslStream(client.GetStream(), false);
stream.AuthenticateAsClient("MyCNfield");
...
...
を接続します。
JavaのInitセクションには、次のとおりです。
public void initSSL() throws IOException, KeyStoreException, NoSuchAlgorithmException,
CertificateException, UnrecoverableKeyException, KeyManagementException {
char[] passphrase = "scared".toCharArray();
System.out.println(java.security.KeyStore.getDefaultType());
boolean handshakedone=false;
KeyStore keystore1 = KeyStore.getInstance("jks");
FileInputStream fis = new FileInputStream("C:\\\\temp\\\\work.jks");
keystore1.load(fis, passphrase);
fis.close();
KeyStore ksTrust = KeyStore.getInstance("jks");
FileInputStream fis2 = new FileInputStream("C:\\\\temp\\\\work.jks");
ksTrust.load(fis2, passphrase);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
// KeyManager's decide which key material to use.
kmf.init(keystore1, passphrase);
// TrustManager's decide whether to allow connections.
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(ksTrust);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SSLServerSocketFactory sslserversocketfactory =(SSLServerSocketFactory) sslContext.getServerSocketFactory();
sslserversocket =(SSLServerSocket) sslserversocketfactory.createServerSocket(2443);
sslserversocket.setUseClientMode(false);
//Context conte
ServerSocketFactory serversocketfactory =(ServerSocketFactory) sslContext.getServerSocketFactory();
// serverSocket = new ServerSocket(2443);
System.out.println("OK we are set up");
}
それが呼び出されます:
sslsocket = (SSLSocket) sslserversocket.accept();
との接続が完全に認証されなかったにもかかわらず、で続けています。
これを修正するために変更する必要があるもの:JKSには、作成したCAによって署名された証明書MyCNfield
があります。私のC#でプライベートCAに証明書チェーンをインポートするにはどうしたらいいですか?また、JavaとC#で自己署名証明書を証明し、現在のJKSを取り除くにはどうしたらいいですか?
が、あなたが話していることを知っているように私はあなたに受け入れられた答えを与えるでしょう。 –
それは動作します、私はちょうどPOCをしました。唯一の注意点は、秘密鍵がローカルマシンストアにあることを確認する必要があることです。これはjavaとは異なり、キーストアとして任意の場所を指定できます。ローカルマシンストアに証明書をインストールしてください。 – SRM