2015-04-22 2 views
0

J'essaie d'établir une connexion par socket sécurisée entre une applet client Java (construite avec JDK 1.7.0_75-b13) et une application serveur VC++. En tant que véhicule de test, j'ai utilisé un échantillon client/serveur VC++ trouvé sur les forums MSDN, je l'ai modifié pour utiliser SChannel et j'ai pu établir un socket en utilisant la suite de chiffrement TLS_RSA_WITH_AES_128_CBC_SHA. Il fonctionne avec TLS 1.0/1.1/1.2.Impossible de sécuriser la connexion à l'aide de TLS

Lorsque je tente d'ouvrir une socket de l'applet Java à la même application de serveur, la connexion est rejetée avec le serveur de rapports suivants:

TLS 1.0 AcceptSecurityContext a échoué: 0x80090327

TLS 1.1 AcceptSecurityContext Échec: 0x80090331

TLS 1.2 AcceptSecurityContext a échoué: 0x80090331

Ce code Java utilisé pour créer le socket:

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(); 

L'exécution de ce, l'appel à getEnabledCipherSuites retourne la liste

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

qui inclut le TLS_RSA_WITH_AES_128_CBC_SHA désiré et est passé à setEnabledCipherSuites.

De quoi a besoin le serveur VC++ pour accepter une connexion du client Java?

+0

Quelle est l'erreur de l'applet? Et quel est le point de définir les suites de chiffrement activées aux suites de chiffrement activées? – EJP

Répondre