먼저 모든 인증서를 수락하면 보안이없는 것으로 간주 될 수 있음을 인정해야합니다. 우리는 "실제"Certs 있지만 우리의 라이브 시스템에만 있습니다. 테스트 시스템의 인증서는 자체 서명되어 있습니다. 그래서 우리가 개발하는 동안 테스트 서버를 사용해야하는데, 이는 무능력한 인증서를 사용하게합니다.자체 서명 SSL 인증서 허용 -> 기본 TrustManager를 설정할 위치
저는 Stackoverflow에서 많은 토픽을 보았습니다. 그리고 모든 시도를하는 모든 웹에서 동일한 작업을 수행합니다. SSL 인증서 수락. 그러나 나는이 질문들 중 어느 것도 대답을 적용하지 않는다. 나는 HTTPSUrlConnections
을 망치고 있지 않다. 나는 (clearification에 대한 주석) 코드는 일반적으로 다음과 같습니다 요청을하고있어 경우
는 :
//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;
}
};
내가 (클라이언트가 위에서 DefaultHttpClient입니다)
SSLSocketFactory ssl = (SSLSocketFactory)client.getConnectionManager().getSchemeRegistry().getScheme("https").getSocketFactory();
ssl.setHostnameVerifier(ACCEPT_ALL_HOSTNAMES);
응답이 "호스트 이름 ** 일치하지 않습니다"에서 회전과 같은 내 요청 내부의 HostnameVerifier
를 주입하는 경우 :이처럼 만들어 "잘못된 요청". 나는 TrustManager를 설정해야만한다고 생각하지만, 내가 요청한 곳의 HttpsUrlConnections를 사용하지 않아서 내 요청에 그것을 설정해야하는 곳이 없다.
어떤 cert (어떤 코드도 제거 할 수없는, 특히 마감 시간이되면 잊어 버릴 수있는 코드)을 추가하는 대신에, 자신 만의 실행을 고려할 수 있습니다 테스트 CA. 테스트 CA 인증서를 트러스트 스토어에서 가져와야하지만 호스트 이름을 포함하여 더 현실적인 테스트입니다 (출시 된 제품에 불량 코드를 남기지 않는 경향이 있음). 작은 CA를 관리하는 데 도움이되는 도구가 있습니다. – Bruno