принимать самоподписанные сертификаты SSL-> где установить по умолчанию TrustManager
Сначала я должен был признать, что знаю, что принятие всех сертификатов может рассматриваться как отсутствие безопасности. У нас есть "реальный» Сертификаты, но только на наших живых системах. Сертификаты в наших тестовых системах являются самозаверяющими. Так что пока мыПри разработке мы должны использовать тест-серверы, что заставляет меня отключать сертификаты.
Здесь, в Stackoverflow и во всем Интернете, я видел множество тем, которые пытаются сделать одно и то же: принимать SSL-сертификаты. Однако ни один из этих ответов, кажется, не относится к моей проблеме, так как яЯ не возиться с.HTTPSUrlConnections
Если я'Когда я делаю запрос, код обычно выглядит так (закомментировано для пояснения):
//creates an HTTP-Post with an URL
HttpPost post = createBaseHttpPost();
//loads the request Data inside the httpPost
post.setEntity(getHttpPostEntity());
//appends some Headers like user-agend or Request UUIDs
appendHeaders(post);
HttpClient client = new DefaultHttpClient();
//mResponse is a custom Object which is returned
//from the custom ResponseHandler(mResponseHandler)
mResponse = client.execute(post, mResponseHandler);
return mResponse;
Я прочитал, что я должен вводить свой собственныйTrustManager
а такжеX509HostnameVerivier
, Я создал их так:
private static final TrustManager[] TRUST_ALL_CERTS = new TrustManager[]{
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[]{};
}
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
}
};
private static X509HostnameVerifier ACCEPT_ALL_HOSTNAMES =
new X509HostnameVerifier() {
public void verify(String host, String[] cns, String[] subjectAlts)
throws SSLException {
}
public void verify(String host, X509Certificate cert) throws SSLException {
}
public void verify(String host, SSLSocket ssl) throws IOException {
}
public boolean verify(String host, SSLSession session) {
return true;
}
};
Если я введуHostnameVerifier
внутри моего запроса, как это (клиент по умолчанию DefaultHttpClient)
SSLSocketFactory ssl = (SSLSocketFactory)client.getConnectionManager().getSchemeRegistry().getScheme("https").getSocketFactory();
ssl.setHostnameVerifier(ACCEPT_ALL_HOSTNAMES);
ответ превращается изимя хоста ** не сделалт матч " к "Плохой запрос ", Я думаю, мне нужно установить TrustManager, но яЯ не знаю, где установить его в моем запросе, как яЯ не использую HttpsUrlConnections, упомянутые везде, где я их искал.