SSLPeerUnverifiedException при создании SSL-соединения на Android

Я пытаюсь сделать это уже 2 дня, и я просто не могу заставить это работать.

У меня есть настоящий сертификат, подписанный COMODO, который сам подписан USERTrust. Но когда я пытаюсь подключиться к своему домену, это то, что я получаю:

javax.net.ssl.SSLPeerUnverifiedException: No peer certificate 

Код, который я использую для этого:

 public void postData() { // Add your data try { HttpPost post = new HttpPost(new URI("https://example.com")); KeyStore trusted = KeyStore.getInstance("BKS"); trusted.load(null, "".toCharArray()); SSLSocketFactory sslf = new SSLSocketFactory(trusted); sslf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); SchemeRegistry schemeRegistry = new SchemeRegistry(); schemeRegistry.register(new Scheme ("https", sslf, 443)); SingleClientConnManager cm = new SingleClientConnManager(post.getParams(), schemeRegistry); HttpClient client = new DefaultHttpClient(cm, post.getParams()); // Execute HTTP Post Request @SuppressWarnings("unused") HttpResponse result = client.execute(post); } catch (ClientProtocolException e) { // TODO Auto-generated catch block Log.e(TAG,e.getMessage()); Log.e(TAG,e.toString()); e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block Log.e(TAG,e.getMessage()); Log.e(TAG,e.toString()); e.printStackTrace(); } catch (URISyntaxException e) { // TODO Auto-generated catch block Log.e(TAG,e.getMessage()); Log.e(TAG,e.toString()); e.printStackTrace(); } catch (KeyStoreException e) { // TODO Auto-generated catch block Log.e(TAG,e.getMessage()); Log.e(TAG,e.toString()); e.printStackTrace(); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block Log.e(TAG,e.getMessage()); Log.e(TAG,e.toString()); e.printStackTrace(); } catch (CertificateException e) { // TODO Auto-generated catch block e.printStackTrace(); Log.e(TAG,e.toString()); Log.e(TAG,e.getMessage()); } catch (KeyManagementException e) { // TODO Auto-generated catch block Log.e(TAG,e.getMessage()); Log.e(TAG,e.toString()); e.printStackTrace(); } catch (UnrecoverableKeyException e) { // TODO Auto-generated catch block Log.e(TAG,e.getMessage()); Log.e(TAG,e.toString()); e.printStackTrace(); } } 

Я попробовал как свой домен, так и https://google.com . Они оба возвращают то же самое. И вот стек:

 02-01 10:24:30.067: W/System.err(15560): javax.net.ssl.SSLPeerUnverifiedException: No peer certificate 02-01 10:24:30.088: W/System.err(15560): at org.apache.harmony.xnet.provider.jsse.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:258) 02-01 10:24:30.098: W/System.err(15560): at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:93) 02-01 10:24:30.098: W/System.err(15560): at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381) 02-01 10:24:30.108: W/System.err(15560): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:164) 02-01 10:24:30.108: W/System.err(15560): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 02-01 10:24:30.128: W/System.err(15560): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 02-01 10:24:30.138: W/System.err(15560): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359) 02-01 10:24:30.148: W/System.err(15560): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 02-01 10:24:30.158: W/System.err(15560): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 02-01 10:24:30.158: W/System.err(15560): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 02-01 10:24:30.178: W/System.err(15560): at com.example.Preferences.postData(Preferences.java:103) 02-01 10:24:30.178: W/System.err(15560): at com.example.Preferences.onCreate(Preferences.java:52) 02-01 10:24:30.178: W/System.err(15560): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072) 02-01 10:24:30.178: W/System.err(15560): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1836) 02-01 10:24:30.178: W/System.err(15560): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1893) 02-01 10:24:30.178: W/System.err(15560): at android.app.ActivityThread.access$1500(ActivityThread.java:135) 02-01 10:24:30.178: W/System.err(15560): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054) 02-01 10:24:30.178: W/System.err(15560): at android.os.Handler.dispatchMessage(Handler.java:99) 02-01 10:24:30.178: W/System.err(15560): at android.os.Looper.loop(Looper.java:150) 02-01 10:24:30.178: W/System.err(15560): at android.app.ActivityThread.main(ActivityThread.java:4385) 02-01 10:24:30.188: W/System.err(15560): at java.lang.reflect.Method.invokeNative(Native Method) 02-01 10:24:30.188: W/System.err(15560): at java.lang.reflect.Method.invoke(Method.java:507) 02-01 10:24:30.188: W/System.err(15560): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) 02-01 10:24:30.188: W/System.err(15560): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) 

Кроме того, просматривая журналы, я обнаружил, что, по моему мнению, является ошибкой, которая вызывает это:

 02-01 10:44:13.122: W/System.err(15746): Catch exception while startHandshake: javax.net.ssl.SSLHandshakeException: java.security.InvalidAlgorithmParameterException: trustAnchors.isEmpty() 02-01 10:44:13.122: W/System.err(15746): return an invalid session with invalid cipher suite of SSL_NULL_WITH_NULL_NULL 

За эти 2 дня я прочитал TONS статей, объясняющих, как подключиться к самоподписанному сайту, защищенному SSL. Я также нашел этот вопрос, в котором я получил код, но я не могу, чтобы жизнь меня определяла, что означает использование using the default Android verification mechanism и как его реализовать.

Может ли кто-нибудь предоставить фрагмент кода, который исправляет или реализует подключение к REAL-сертификату?

Благодаря!

То, что я делал неправильно, не предоставляло TrustManager SSLContextFactory. Более полное объяснение в моем блоге . Слишком долго, чтобы публиковать здесь.

Intereting Posts
Genymotion, «Не удалось загрузить движок VirtualBox» на Mavericks. VBox настроен правильно Плагин геолокации на Cordova 5.0.0 всегда возвращает время ожидания с ошибкой Как я могу масштабировать изображение без размытия? Android Studio импортирует существующие модульные тесты «Невозможно найти информацию об оборудовании» Как использовать getlinecount () в textview android Автоматическое добавление нескольких пользовательских представлений в макет Файл записи NDK для Android Поддержка геймпада Android Android 2.3.4 – пароль типа ввода Html имеет границу с фокусом Android проверяет наличие GPS на устройстве Как использовать функцию HTML New Line в текстовом виде Android? Добавление CheckBox к представлению строк ListView делает строку не интерактивной Ошибка "не может использовать клиент командной строки subversion: svn" при открытии проекта Android из svn Невозможно объединить пользовательский заголовок с другими функциями заголовка Поддерживает ли API Android файлы KML?