2011-05-07 4 views
4

설정 : WL 9.2 + Jersey 1.1.5.1 on WL 's Jrockit. 새 버전 Java 6이 필요하기 때문에 Jersey 1.1.5.1을 선택했습니다. 웹 로직 EJB는 REST 클라이언트 역할을하며,이 오류가 점점 계속 :저지 HTTPS가있는 Weblogic REST 클라이언트 : 핸드 셰이크 오류

-Dweblogic.security.SSL.ignoreHostnameVerification=true -Dweblogic.security.SSL.enforceConstraints=off -Dweblogic.webservice.client.ssl.strictcertchecking=false 
이 단지 POC 구현으로

ClientHandlerException: javax.net.ssl.SSLKeyException: [Security:090477]Certificate chain received from svcpoint.restprovider.com - xx.xxx.xxx.xx was not trusted causing SSL handshake failure.

을, 웹 로직은 다양한 플래그 설정이 바로이 오류가 멀리 갈 수 있도록 인증서 검증을 무시하는 것입니다

SSLContext ctx = SSLContext.getInstance("SSL"); 
HTTPSProperties prop = new HTTPSProperties(
new HostnameVerifier() { 
    public boolean verify(String hostname, SSLSession session) { 
     System.out.println("\n\nFAKE_Verifier: " + hostname+"\n\n"); 
     return true; 
    } 
}, ctx); 
config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, prop); 

마지막으로, 유일한 WL 서버, 기술적으로 관리 SRV는, 관리자 C로 구성된 :

또한, 저지 구성 설정이 비트를 포함 호스트 이름 확인을 사용하지 않는 SSL.Advanced 설정.

는 지금, 나는, 뉴저지 내 가짜 검증 설정이 실제로 관여하지 않습니다 확신 해요 나는 SSL 디버그에서이 오류를 참조로 :

<SecuritySSL> <000000> <weblogic user specified trustmanager validation status 16> 
<Security> <BEA-090477> <Certificate chain received from svcpoint.restprovider.com - xx.xxx.xxx.xx was not trusted causing SSL handshake failure.> 
<SecuritySSL> <000000> <Validation error = 16> 
<SecuritySSL> <000000> <Certificate chain is untrusted> 
<SecuritySSL> <000000> <SSLTrustValidator returns: 16> 
<SecuritySSL> <000000> <Trust status (16): CERT_CHAIN_UNTRUSTED> 
<SecuritySSL> <000000> <NEW ALERT with Severity: FATAL, Type: 42 
    java.lang.Exception: New alert stack 
at com.certicom.tls.record.alert.Alert.<init>(Unknown Source) 

내가 봤 여기에 다른 유사한 문제를 검토 한 결과를 그래서, 아마 뭔가 빠졌을거야. 또한 인증서가 유효하다고 판단 할 수 있으므로 CN = *. restprovider.com에 대해 표시하고 2011 년 11 월에 만료됩니다.

답변

2

인증서가 신뢰할 수 없습니다. 키 스토어 인증서

를 포함한다 -

TrustManagerFactory trustManagerFactory = TrustManagerFactory 
       .getInstance("SunX509"); 
    trustManagerFactory.init(trustStore); 
    trustManagers = trustManagerFactory.getTrustManagers(); 
    SSLContext context = SSLContext.getInstance("TLS"); 
    context.init(keyManagers, trustManagers, new SecureRandom()); 
    HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory()); 

신뢰 :

keytool -importcert -trustcacerts ... 

또한 코드에서 작업을 수행 할 수 있습니다 나는 최선의 해결책이 키 도구를 사용하여 웹 로직의 신뢰 저장소에 추가 될 것이라고 생각

+0

그래, 나는 그것을 추가하려고 시도했지만 그것은 전혀 도움이되지 않았다. 이 일을 제대로 수행하기 위해 저지와 함께 돌봐야 할 것이 있는지 궁금합니다. – Karoy

+1

좋습니다. \ jrockit90_150_10 \ jre \ lib \ security \ cacerts 키 저장소에 인증서를 추가하는 것이 정답입니다. 어떤 이유로 든, 나는 단지 DemoIdentity, jks store와 같은 서버 인스턴스에만 추가했다. – Karoy

+0

이런 일이 어떻게 발생했는지 모르지만 여기에 해당하는 올바른 키 저장소는 ** server \ lib \ DemoTrust.jks **입니다. 나의 이전의 코멘트는 그렇지 않다는 것을 나타 냈지만 분명히 틀렸다. 내 잘못이야.. – Karoy

관련 문제