Anlehnend an den Thread No trusted certificate found (der leider ein Häckchen hat, das nicht mehr zu löschen ist), hätte ich folgendes Problem (ich weiss, steht in dem Thread auch schon - aber das Häckchen...):
Ich möchte per SSLSocket und SSLServerSocket eine Verbindung aufbauen. Allerdings ohne Zertifikat.
Mein Quellcode sieht so aus (erst Client, dann Server):
Die Klasse TrustAllManager sieht folgendermaßen aus:
Beim Server kommt aber immer die Meldung (Die Zeilenummer der Exception - 28 - stimmt wahrscheinlich nicht, da ich einige Sachen herausgenommen habe - ist aber in der Zeile von ssl.accept() ):
Irgendwelche Ideen, wie man das hinbekommt?
Ich möchte per SSLSocket und SSLServerSocket eine Verbindung aufbauen. Allerdings ohne Zertifikat.
Mein Quellcode sieht so aus (erst Client, dann Server):
Code:
import javax.net.SocketFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.TrustManager;
public class SSLClient {
public static void main(String[] args) {
SSLSocket ssl;
SSLContext sc;
SocketFactory sf;
try {
sc = SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[]{new TrustAllManager()}, null);
sf = sc.getSocketFactory();
ssl = (SSLSocket) sf.createSocket("localhost", 25000);
ssl.close();
} catch (Throwable t) {
t.printStackTrace();
}
}
}
Code:
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.TrustManager;
public class SSLServer {
public static void main(String[] args) {
SSLServerSocket ssl;
SSLSocket socket;
SSLContext sc;
SSLServerSocketFactory sf;
try {
sc = SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[]{new TrustAllManager()}, null);
sf = sc.getServerSocketFactory();
ssl = (SSLServerSocket) sf.createServerSocket(25000);
socket = (SSLSocket) ssl.accept();
if (socket != null) {
System.out.println(socket.getPort());
}
} catch (Throwable t) {
t.printStackTrace();
}
}
}
Die Klasse TrustAllManager sieht folgendermaßen aus:
Code:
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
public class TrustAllManager implements X509TrustManager {
public TrustAllManager() {
super();
}
public void checkClientTrusted(final X509Certificate[] chain,
final String authType) throws CertificateException {
}
public void checkServerTrusted(final X509Certificate[] chain,
final String authType) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
Beim Server kommt aber immer die Meldung (Die Zeilenummer der Exception - 28 - stimmt wahrscheinlich nicht, da ich einige Sachen herausgenommen habe - ist aber in der Zeile von ssl.accept() ):
Code:
javax.net.ssl.SSLException: No available certificate or key corresponds to the SSL cipher suites which are enabled.
at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.checkEnabledSuites(SSLServerSocketImpl.java:303)
at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.accept(SSLServerSocketImpl.java:253)
at test.SSLServer.main(SSLServer.java:28)
Irgendwelche Ideen, wie man das hinbekommt?