Hey, ich würde ganz gern zwei Clients über einen Server kommunizieren lassen mit SSLSockets in Java, mit entsprechenden Zertifikat.
Allerdings scheint das nicht ganz so zu funktionieren wie ich mir das denke.
Mein Code sieht in etwa so aus für den Teil der die Verbindung annimmt:
In ComH wird dann der Handshake durchgeführt und dann die Daten verarbeitet.
createSSLContext():
Wenn ich nun versuche z.Bsp via Browser darauf zuzugreifen bekomme ich zwei Handshake Exceptions: No available authentication scheme und no cipher suites in common.
Ich weiß leider nicht wo der Fehler ist, vermutlich im SSLContext. Das Zertifikat ist zwar selbst signiert, sollte aber trotzdem funktionieren.
Eventuell kann man mir da weiter helfen.
Allerdings scheint das nicht ganz so zu funktionieren wie ich mir das denke.
Mein Code sieht in etwa so aus für den Teil der die Verbindung annimmt:
Java:
SSLContext sslContext = createSSLContext();
try{
SSLServerSocketFactory sslServerSocketFactory = sslContext.getServerSocketFactory();
//Create server socket
SSLServerSocket sslServerSocket = (SSLServerSocket) sslServerSocketFactory.createServerSocket(9999);
while(true){
SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept();
//Handle connection
Thread nsh = new Thread(new ComH(sslSocket));
nsh.start();
}
}catch (Exception e){
e.printStackTrace();
}
createSSLContext():
Java:
private SSLContext createSSLContext(){
try{
InputStream certfile = new FileInputStream("./cert/localhost.cert");
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
Certificate certificate = certificateFactory.generateCertificate(certfile);
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("certificate", certificate);
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
SSLContext context = SSLContext.getInstance("TLSv1.2");
context.init(null, tmf.getTrustManagers(), null);
return context;
}catch (Exception e){
e.printStackTrace();
}
return null;
}
Wenn ich nun versuche z.Bsp via Browser darauf zuzugreifen bekomme ich zwei Handshake Exceptions: No available authentication scheme und no cipher suites in common.
Ich weiß leider nicht wo der Fehler ist, vermutlich im SSLContext. Das Zertifikat ist zwar selbst signiert, sollte aber trotzdem funktionieren.
Eventuell kann man mir da weiter helfen.