Ich habe seit Tagen versucht, das funktioniert zu bekommen. Ich versuche, eine Verbindung zu meinem Server über https mit einem selbst signierten Zertifikat herzustellen. Ich glaube nicht, dass es Seiten oder Beispiele gibt, die ich noch nicht gelesen habe.OkHttp javax.net.ssl.SSLPeerUnverifiedException: Hostname domain.com nicht verifiziert
Was ich getan habe:
- Erstellt bks Schlüsselspeicher von diesem Tutorial folgenden: http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html
Es verwendet openssl s_client -connect domain.com:443
das Zertifikat vom Server zu erhalten. Dann erstellt einen bks Keystore mit Hüpfburg.
Lesen erstellt Keystore aus Raw-Ordner, fügen Sie es zu sslfactory und dann zu OkHttpClient. Wie folgt aus:
public ApiService() { mClient = new OkHttpClient(); mClient.setConnectTimeout(TIMEOUT_SECONDS, TimeUnit.SECONDS); mClient.setReadTimeout(TIMEOUT_SECONDS, TimeUnit.SECONDS); mClient.setCache(getCache()); mClient.setCertificatePinner(getPinnedCerts()); mClient.setSslSocketFactory(getSSL()); } protected SSLSocketFactory getSSL() { try { KeyStore trusted = KeyStore.getInstance("BKS"); InputStream in = Beadict.getAppContext().getResources().openRawResource(R.raw.mytruststore); trusted.load(in, "pwd".toCharArray()); SSLContext sslContext = SSLContext.getInstance("TLS"); TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(trusted); sslContext.init(null, trustManagerFactory.getTrustManagers(), null); return sslContext.getSocketFactory(); } catch(Exception e) { e.printStackTrace(); } return null; } public CertificatePinner getPinnedCerts() { return new CertificatePinner.Builder() .add("domain.com", "sha1/theSha=") .build(); }
dieser aus irgendeinem Grund erzeugt dies immer eine
SSLPeerUnverifiedException
mit oder ohne Schlüsselspeicher. Und mit oder ohneCertificatePinner
.javax.net.ssl.SSLPeerUnverifiedException: Hostname domain.com not verified: 0 W/System.err﹕ certificate: sha1/theSha= W/System.err﹕ DN: 1.2.840.113549.1.9.1=#1610696e666f40626561646963742e636f6d,CN=http://domain.com,OU=development,O=domain,L=Valencia,ST=Valencia,C=ES W/System.err﹕ subjectAltNames: [] W/System.err﹕ at com.squareup.okhttp.internal.http.SocketConnector.connectTls(SocketConnector.java:124) W/System.err﹕ at com.squareup.okhttp.Connection.connect(Connection.java:143) W/System.err﹕ at com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:185) W/System.err﹕ at com.squareup.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128) W/System.err﹕ at com.squareup.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:341) W/System.err﹕ at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330) W/System.err﹕ at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248) W/System.err﹕ at com.squareup.okhttp.Call.getResponse(Call.java:273) W/System.err﹕ at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:230) W/System.err﹕ at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:201) W/System.err﹕ at com.squareup.okhttp.Call.execute(Call.java:81) ...
Was mache ich falsch?
Bitte überprüfen Sie, dass Ihr Zertifikat tatsächlichen Host-Namen und nicht IP-Adresse enthält (IP-Adressen sollen im 'Antragstellernamen 'Feld des Zertifikats sein). Wie bei 'HostnameVerifier', was" True "zurückgibt, wird SSL nutzlos und unsicher (die meisten Uploads). Auf modernen Android-Geräten können Sie Ihr selbstsigniertes Zertifikat problemlos über Sicherheitseinstellungen installieren. –