Доверять всем сертификатам?X509Certificate - PullRequest
1 голос
/ 27 сентября 2011

У меня следующий код, который подключается через HTTPS, но я получаю следующую ошибку при попытке подключения.

WARN / System.err (9456): javax.net.ssl.SSLHandshakeException: org.bouncycastle.jce.exception.ExtCertPathValidatorException: не удалось проверить подпись сертификата.

Как мне решить это? Доверять всем сертификатам? Как я могу это сделать? Это не будет проблемой, так как я подключаюсь только к одному серверу. FY Я уже внедрил EasyX509TrustManager как класс в моем приложении.

Заранее спасибо.

 try {
            HttpClient client = new DefaultHttpClient();
            // Setting up parameters 
            SchemeRegistry schemeRegistry = new SchemeRegistry(); 
            // http scheme 
            schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
            // https scheme 
            schemeRegistry.register(new Scheme("https", new EasySSLSocketFactory(), 443)); 

            HttpParams params = new BasicHttpParams(); 
            params.setParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS, 30); 
            params.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE, new ConnPerRouteBean(30)); 
            params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false); 
            HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); 

            ClientConnectionManager cm = new ThreadSafeClientConnManager(params, schemeRegistry); 

            DefaultHttpClient httpClient = new DefaultHttpClient(cm, client.getParams()); 


            // Example send HttpsPost request 
            final String url = "https://www.xxxx.com/web/restricted/form/formelement"; 

            // Do the HTTPS Post
            HttpPost httpPost = new HttpPost(url); 

                ArrayList<NameValuePair> postParameters; 
            postParameters = new ArrayList<NameValuePair>(2); 
            postParameters.add(new BasicNameValuePair("usr_name", username)); 
            postParameters.add(new BasicNameValuePair("usr_password", password));

            System.out.println(postParameters); 

            HttpResponse response = httpClient.execute(httpPost);
            Log.w("Response ","Status line : "+ response.toString());

Привет, Питер,

Спасибо за ваш ответ, я последовал вашему совету и сообщение, которое не удалось проверить, пропало. Однако теперь я получаю следующее сообщение:

09-26 23: 47: 20.381: WARN / ResponseProcessCookies (10704): Файл cookie отклонен: «BasicClientCookie [версия = 0, имя = ObFormLoginCookie, домен = www.kpn.com, путь = / web / limited / form?» formelement = 512663, экспирации = NULL]». Атрибут недопустимого пути "/ web / limited / form? Formelement = 512663". Путь происхождения: "/ Интернет / ограничено / форма / formelement = 512663" 09-26 23: 47: 20.461: ПРЕДУПРЕЖДЕНИЕ / Ответ (10704): Строка состояния: org.apache.http.message.BasicHttpResponse@407afb98

Так что, похоже, что-то не так в заголовках?

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

Не доверяйте всем сертификатам, это очень, очень плохая идея.Создайте хранилище ключей с сертификатом вашего сервера, поместите в исходные ресурсы приложения и загрузите его в SSLSocketFactory HttpClient.Затем зарегистрируйте эту фабрику для https в SchemeRegistry.

0 голосов
/ 27 сентября 2011

Вам необходимо предоставить свой собственный TrustManager, который доверяет всем сертификатам.

См. Этот ответ: HTTPS и выдача самозаверяющих сертификатов

...