2011-03-09 12 views
0

내 자체 서명 인증서가 승인 될 얻을 수 없다, 나는 다음과 같은 방법을 사용하고 작업을 DefaultHttpClient를 가져올 수 없습니다 :자체 서명 인증서

HostnameVerifier hostnameVerifier = 
    org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER; 

DefaultHttpClient dummy = new DefaultHttpClient(); 

SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory(); 
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier); 

SchemeRegistry registry = new SchemeRegistry(); 
registry.register(new Scheme("https", socketFactory, 8443)); 

SingleClientConnManager mgr = new SingleClientConnManager(
    dummy.getParams(), registry); 
DefaultHttpClient client = new DefaultHttpClient(mgr, dummy.getParams()); 

// make connection with 'client' now. 

내 서버입니다 https로 8443에서 듣기 만하면 브라우저로 확인할 수 있습니다. 나는 같은 주제에 몇 가지 다른 게시물에서 위 데려 갈거야 :. 나를 위해 작동하지 않습니다

확실하지 왜, 단지 연결시 "신뢰할 수없는 서버 인증서"예외 "가 계속 어떤 아이디어

?

Accepting a certificate for HTTPs on Android

감사

답변

-1

나는 수많은 개발 서버에서이 작업을 했어. 자체 서명 인증서로 SSL을 사용하지보다이 다른 주위에 방법이 없습니다.

은 그냥 자바 것 같다 보안 발행물.

+0

이러한 사용자는 HttpClient를 위해 어떻게 든 작동한다고 신고 했습니까? 나는 그것이 URLConnection에 대한 다른 프로젝트에서 일하고 있다고 생각하지만, 그 클래스는 매우 적은 버그를 가지고있다. https는 모든 몇 번의 연결 시도에서 스트림을 닫지 않는 것으로 보인다. – user291701

+0

ID 다른 답변을 시도해보십시오 (나보다 많은 경험이있는 것으로 보입니다. 팀 구성원이이 문제를 해결하려고 시도했지만 솔루션을 찾지 못했다는 것을 알고 있습니다. 위에 언급했듯이. –

1

기본적으로 java는 cacerts 인 기본 신뢰 저장소의 인증서를 신뢰합니다.
물론 서버 인증을 위해 보내도록 서버를 구성한 자체 서명 인증서는 신뢰할 수있는 인증서가 아니기 때문에 신뢰할 수없는 것으로 거부됩니다.
arround를 얻으려면 JSSE에서 사용하는 sslcontext를 구성하여 사용자 정의 신뢰 저장소를 사용하여 Java 기본값을 무시하고 자체 서명 된 인증서를 포함하도록해야합니다.
초기화시 트러스트 매니저에 키 저장소를로드하여 수행합니다.
Android에서 근무하지 않았지만이 게시물이 appache httpsclient 인 경우 질문과 Oleg의 답변에서 참조로 사용할 코드를 찾을 수 있습니다.
호프가 도움이 되었기를 바랍니다.

관련 문제