Moin,
da ich gerade mal wieder mit StartSSL rumspiele. Java selber kennt StartSSL nicht, daher werden entsprechende Downloads von Java mit einer Exception quittiert. Die Suche hat mich auch Nerven gekostet, da alle Beispiele darauf abzielten, den CA von StartSSL im Rechner zu installieren. Und da wundert sich die Informatiker Welt, das keiner Verschlüsselung verwendet - naja:
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
/**
* http://www.böses-forum.org/netzwerkeprogrammierung/90833-zertifikat-automatisch-akzeptieren.html
*/
public class CustomTrustManager {
private static X509Certificate cert1;
public static void setup() throws KeyManagementException, NoSuchAlgorithmException, CertificateException {
final CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
cert1 = (X509Certificate) certificateFactory.generateCertificate(CustomTrustManager.class.getClassLoader().getResourceAsStream("res/eigenes-CA-von.StartCOM.crt"));
final TrustManager[] trustManager = new TrustManager[] {
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; }
public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) throws CertificateException { }
public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) throws CertificateException { if (!certs[0].equals(cert1)) throw new CertificateException(); }
}
};
final SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustManager, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
}
// public static void main(String[] args) throws Exception {
// CustomTrustManager.setup();
//
// URL url = new URL("https://treedo.de/index.php?site=system&action=apikey&email=mogel&password=12345");
// HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
// con.connect();
// BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
// String line;
// while ((line = br.readLine()) != null)
// System.out.println(line);
//
// con.disconnect();
//
// }
}
Wichtig dabei ist das man das eigene CRT seiner Seite verwendet. Im Orginalbeispiel von Fancy steht dort startssl.crt. Was mich durchaus zu vielen Fehlern führte, da ich dachte das dort das CRT von StartCOM hin muss.
aber nun gehts, danke @Fancy , mogel