我正嘗試在Java客戶端小應用程序(使用JDK 1.7.0_75-b13構建)和VC++服務器應用程序之間建立安全套接字連接。使用TLS無法保護連接
作爲一個測試工具,我使用了一個在MSDN論壇中找到的VC++客戶端/服務器示例,將其修改爲使用SChannel,並且能夠使用密碼套件TLS_RSA_WITH_AES_128_CBC_SHA建立套接字。它適用於任何TLS 1.0/1.1/1.2。
當我嘗試從Java小程序打開一個套接字連接到同一臺服務器的應用程序,連接被拒絕,並在服務器報告如下:
TLS 1.0 AcceptSecurityContext失敗:0x80090327
TLS 1.1 AcceptSecurityContext失敗:0x80090331
TLS 1。2 AcceptSecurityContext失敗:0x80090331
這是一個用於創建套接字的Java代碼:
debugPrint("Setting up secure connection");
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("127.0.0.1", socketnumber);
debugPrint("Starting handshake");
sslsocket.setTcpNoDelay(true);
sslsocket.setSoLinger(false, 0);
sslsocket.setKeepAlive(true);
sslsocket.setReuseAddress(true);
sslsocket.setSoTimeout(10000);
sslsocket.setUseClientMode(true);
sslsocket.setWantClientAuth(false);
sslsocket.addHandshakeCompletedListener(new HandshakeCompletedListener()
{
@Override
public void handshakeCompleted(HandshakeCompletedEvent arg0)
{
debugPrint("handshake complete!");
StealthStatus.setServiceConnected(true);
}
});
String cipherSuites[] = sslsocket.getEnabledCipherSuites();
for (int inx=0; inx < cipherSuites.length; inx++)
{
debugPrint("SSL cipher suite supported->" + cipherSuites[inx]);
}
sslsocket.setEnabledCipherSuites(cipherSuites);
sslsocket.startHandshake();
socket = sslsocket;
socketOut = sslsocket.getOutputStream();
socketIn = sslsocket.getInputStream();
運行此,調用getEnabledCipherSuites返回列表
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_DSS_WITH_AES_128_CBC_SHA
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDHE_RSA _WITH_3DES_EDE_CBC_SHA
SSL_RSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
TLS_ECDHE_RSA_WITH_RC4_128_SHA
SSL_RSA_WITH_RC4_128_SHA
TLS_ECDH_ECDSA_WITH_RC4_128_SHA
TLS_ECDH_RSA_WITH_RC4_128_SHA
SSL_RSA_WITH_RC4_128_MD5
TLS_EMPTY_RENEGOTIATION_INFO_SCSV
其中包含所需的TLS_RSA_WITH_AES_128_CBC_SHA並傳遞給setEnabledCipherSuites。
讓VC++服務器接受來自Java客戶端的連接需要什麼?
該小程序得到什麼錯誤?將啓用的密碼套件設置爲啓用的密碼套件到底是什麼? – EJP