2011-12-08 3 views
2

https url로 연결을 설정하려고했으나 테스트 중이므로 url이 테스트 환경으로 리디렉션되어 브라우저가 프롬프트를 표시합니다 대략 인증서가 신뢰할 수 있고 유효하지만 도메인 이름과 일치하지 않는다는 메시지와 사용자가 계속 진행하려는 경우. 나는 자바에서 이것을 다루는데 어려움을 겪고있다. 내가 찾은 모든 대답은 이와 같은 TrustManager를 사용하는 것이 좋습니다.Java SSL 연결에서 "인증서에 잘못된 이름"유형 오류가 발생합니다.

TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { 
    public X509Certificate[] getAcceptedIssuers() { 
     return null; 
    } 

    public void checkClientTrusted(X509Certificate[] certs, String authType) { 
     return; 
    } 

    public void checkServerTrusted(X509Certificate[] certs, String authType) { 
     return; 
    } 
}}; 

sslContext.init(kmf.getKeyManagers(), trustAllCerts, new SecureRandom()); 

그러나 이것은 아무런 변화가 없습니다.

인증에는 클라이언트 인증서의 개인 키를 읽을 때 암호를 입력해야하는데이 방법은 브라우저와 응용 프로그램에서 모두 동일하게 올바르게 작동합니다.이 인증 후에는 브라우저에서 팝업이 나타나거나 연결에서 내 응용 프로그램에서 'bad_certificate'오류가 발생했습니다. 도메인 유효성 검사를 완전히 무시하거나 동일한 프롬프트를 표시하는 다른 방법이 있습니까?

분명히하기 위해 프로그램을 만들었 기 때문에 암호를 묻는 메시지가 나타나지 않습니다. 응용 프로그램이 개인 키를 액세스하려고 할 때 응용 프로그램을 탐지하는 창에서 발생한다고 생각합니다. 두 번째 프롬프트는 비슷한 방식으로 작동하지만 아직 어떤 매개 변수도 찾지 못했습니다.

답변

0

코드 테스트를 위해이 작업을 수행하는 경우 올바른 방법이 아니라는 점을 알려드립니다. 브라우저는 종종 오류를 무시하고 문제가 발생하더라도 사용자가 계속해서 콘텐트를 만들고 싶은지 여부를 묻습니다. 그가 계속하기로 결정하면 그는 결정을 소유합니다. Java 응용 프로그램에서 JDK를 사용하는 경우 기본 SSLSocketFactory가 제공되면 SSL 세션은 SSL 핸드 셰이크가 성공한 경우에만 설정됩니다. 보안상의 이유로 당신이 당신의 브라우저와 같은 기능을 가질 필요가 있다면; 보안 문제와 관계없이 계속 진행하려면 사용자 지정 구현이 필요합니다. 또는 SSL을 전혀 사용하지 않는 것이 좋습니다.

+0

이것은 유효한 경고입니다. 그러나 나는 대답이 아니라는 이유로 downvoted : Java 코드가 합법적 인 HTTPS URL에 연결해야하는 상황이 있습니다. Java 코드는 좋은 브라우저와 마찬가지로 "인증서의 이름 X가 일치하지 않습니다 URL의 호스트 이름 Y "와 사용자가 어쨌든 연결을 원할 때. –

0

도메인 유효성 검사를 무시하거나 다른 방법이 있나요 ...

예. 의 URL의 호스트 이름과 서버의 식별 호스트 이름 불일치, 검증 메커니즘이 연결 가 허용 여부를 결정하기 위해이 인터페이스의 구현에 다시 를 호출 할 경우, 핸드 쉐이크 중에

: 자바의 HostnameVerifier 인터페이스를 참조하십시오.

관련 문제