2014-12-30 2 views
3

URL https://someurl.com에서 RESTful 서비스를 사용하려고합니다.Websphere에서 인증서 체인 오류가 발생했습니다.

Security.setProperty("ssl.SocketFactory.provider", "com.ibm.jsse2.SSLSocketFactoryImpl"); 
Security.setProperty("ssl.ServerSocketFactory.provider", "com.ibm.jsse2.SSLServerSocketFactoryImpl"); 
Security.setProperty("javax.net.ssl.trustStore", "cacerts.jks"); 
Security.setProperty("javax.net.ssl.keyStore", "keystore.jks"); 
Security.setProperty("javax.net.ssl.keyStoreType", "pkcs12"); 
Security.setProperty("javax.net.ssl.trustStoreType", "JKS"); 

지금까지 수행 한 구성 변경은 다음과 같습니다 :

  1. 가 someurl으로 URL을 사용하여 인증서를 검색 true
  2. com.ibm.websphere.ssl.retrieveLeafCert을 설정하고 나는 내 코드에서 다음과 같은 속성을 추가 한 포트 443을 열고 트러스트 스토어에 추가했습니다.
  3. 서버

를 다시 시작하지만 다음과 같은 예외가 점점 오전 : 나는 믿고있어

java.security.cert.CertPathValidatorException: Certificate chaining error 
javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.h: PKIX path building failed:   java.security.cert.CertPathBuilderException: PKIXCertPathBuilderImpl could not build a valid CertPath.; internal cause is: 
    java.security.cert.CertPathValidatorException: The certificate issued by CN=Walmart Root CA, O=Wal-Mart Stores Inc is not trusted; internal cause is: 
    java.security.cert.CertPathValidatorException: Certificate chaining error 
    at com.ibm.jsse2.o.a(o.java:22) 
    at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:423) 
    at com.ibm.jsse2.kb.a(kb.java:192) 
    at com.ibm.jsse2.kb.a(kb.java:176) 
    at com.ibm.jsse2.lb.a(lb.java:53) 
    at com.ibm.jsse2.lb.a(lb.java:464) 
    at com.ibm.jsse2.kb.s(kb.java:545) 
    at com.ibm.jsse2.kb.a(kb.java:530) 
    at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:79) 
    at com.ibm.jsse2.SSLSocketImpl.h(SSLSocketImpl.java:437) 
    at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:142) 
    at com.ibm.jsse2.SSLSocketImpl.startHandshake(SSLSocketImpl.java:686) 
    at com.ibm.net.ssl.www2.protocol.https.c.afterConnect(c.java:98) 
    at com.ibm.net.ssl.www2.protocol.https.d.connect(d.java:13) 
    at com.ibm.net.ssl.www2.protocol.https.b.connect(b.java:6) 
    at com.dwl.tcrm.tester.RESTClient_2.main(RESTClient_2.java:76) 

답변

13

당신은 편안한 서비스에 액세스하려고하는 웹 응용 프로그램을 가지고있다.

먼저, javax.net.ssl.* 등록 정보를 통해 상점을 설정하지 말고 WebSphere에 제공된 SSL 구성을 사용하십시오. 따라서이 모든 setProperty() 통화에 댓글을 달으십시오. 둘째, 서비스 저장소 인증서를 트러스트 스토어에 추가해야합니다.

웹 관리 콘솔에 로그인 : Security > SSL certificate and key management > Key stores and certificates > NodeDefaultTrustStore > Signer certificates

  • 클릭 Retrieve from port 버튼

    • 이동 및 호스트 이름, 443 포트 및 별칭을 지정합니다.
    • Retrieve singer information 버튼을 클릭하십시오.
    • 올바른 인증서를 가져온 경우 (상위)를 확인하십시오.
    • 저장하고 다시 시작하십시오.

    일부 버전에서는, 자식 인증서 (안 루트) 가져온,이 경우에, 당신은 수동으로 하나 NodeDefaultTrustStore에 루트 인증서 및 중간 (예를 통해 브라우저 및 가져 오기를 다운로드해야하지만 것 Add 버튼을 사용하여이 시간이되지 Retrieve..

  • +0

    에 따라이를 해결 할 수 있어요 내 포스트, 나는 이미 트러스트 스토어에 인증서를 추가했다.하지만 아무런 차이가 없다. 또한, 독립형 레스트 클라이언트를 통해 서비스를 공격하려했는데 같은 오류가 발생했다. –

    +0

    @AyanBiswas하지만'(javax.net.ssl.trustStore ","cacerts.jks)'에'NodeDefaultTrustStore'에 추가하지 않을 것입니다.이'setProperty' 호출을 제거 했습니까? WebSphere가 사용하는 것과 다른 상점을 가리키고 있기 때문입니다. 그리고 체인 된 인증서의 전체 개념은 잎 대신에 루트 인증서를 사용하기 때문에'com.ibm.websphere.ssl.retrieveLeafCert' 속성을'true'로 설정해서는 안됩니다. – Gas

    +0

    확인. 실수를 지적 해 주셔서 감사합니다. 시도해 보겠습니다. –

    1

    이것은 인증서가 cacerts에 추가되지 않음을 의미. (cacerts에있는 인증서의 목록을 제공)

    키 도구 -list -v -keystore your_path_to_cacerts이 명령을 실행하려고 인증서 일련 번호와 일치하는지 확인하십시오.Internet Explorer -> 도구 -> 인터넷 옵션 -> 내용 -> 인증서 -> 인증서 경로를 보려면 다음을 수행하십시오. 인증서 선택 -> 인증서를 보려면 다음을 수행하십시오. 보기 -> 인증 경로 -> 인증서 내보내기 : 인증서 -> 내보내기 -> DER

    인코딩 된 이진 형식 -> 저장 (Firefox -> 도구 -> 옵션 -> 고급 -> 암호화 -> 인증서보기) (여기에 - http://www-01.ibm.com/support/docview.wss?uid=swg21592616 줄임)이 아래에있는 명령과 함께이 내 보낸 인증서를 추가하십시오.

    키 -keystore cacerts에 (경로) -trustcacerts -import 도구는 3

    내 문제가 동일 단계에서 인증서 경로 수출 -file 별칭을 -alias하고 난에서 언급 한 바와 같이 다음 단계

    관련 문제