Java : 사용자가 SSL 인증서를 수락하도록하는 대화 상자를 표시하는 방법

StackOverflow https://stackoverflow.com/questions/1644059

문제

현재 HTTPS 웹 서버에 대한 자체 서명 인증서가 있습니다.

내 Java 프로그램에는 웹 서버에 소켓을 생성하는 SSLSocketFactory가 있습니다. 태양의 기본 구현은 자체 서명 된 인증서를 차단합니다. 자체 X509TrustManager를 구현하면 인증 날짜가 유효한지 확인할 수 있습니다.

기본 구현이 유효성 (날짜 및 호스트 이름, ...)을 점검 할 수있는 가능성이 있습니까? 그리고 사용자 가이 인증서를 수락하도록 대화 상자를 표시하지 않으면?

지금까지 찾은 각 코드는 지금까지 SSL 수표 만 비활성화하고 모든 유효하지 않은 인증서 만 허용했습니다.

도움이 되었습니까?

해결책

실제로 이것을 시도하지는 않았지만 왜 자신의 신탁 관리자를 구현할 수 없는가? ?


기본값을 사용하여 NULL 인수로 대부분의 보안 클래스를 초기화 할 수 있습니다. 기본 신탁 관리자를 얻으려면 사용 가능한 신탁 관리자를 확보하고 MGRS 배열에서 첫 번째 신탁 관리자를 선택하여 구현해야합니다. X509TrustManager 상호 작용. 일반적으로 배열에는 어쨌든 하나만 포함됩니다.

TrustManagerFactory trustmanagerfactory = 
     TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustmanagerfactory.init((KeyStore)null);
TrustManager[] mgrs = trustmanagerfactory.getTrustManagers();

자신의 확장으로 기본 신탁 관리자를 마무리 한 후에는 SSL 컨텍스트를 초기화하고 소켓 공장을 가져와야합니다.

SSLContext sslContext=SSLContext.getInstance("SSL","SunJSSE");
sslContext.init(null, new TrustManager[] {myTm}, null);
SSLSocketFactory sf = sslContext.getSocketFactory();

그런 다음이 소켓 공장을 사용하여 새 클라이언트 소켓을 만들거나 전달하십시오. HttpsURLConnection.setDefaultSSLSocketFactory 자신의 신뢰 관리자와 URL에서 HTTPS 프로토콜을 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top