2016-09-05 3 views
0

CXF를 사용하여 서비스를 사용해야하고 다음과 같은 문제가 있습니다.Java Cant find 신뢰할 수있는 인증서 (JKS)

내 자바 키 저장소를했다하더라도 (JKS) workig 오 SOAP의 UI는, 예를 들어, 내 자바 프로그램에서 사용할 때 항상 나에게 내가 JKS 파일을 검사 한

sun.security.validator.ValidatorException: No trusted certificate found 

메시지를주고 인증서가 거기에 있으므로 SOAPUI 프로젝트에 넣으면 문제가없는 것으로 인식되어 서비스가 성공적으로 호출됩니다. 나는 다음과 같이베이스로 CXF 웹 사이트 (http://svn.apache.org/viewvc/cxf/trunk/distribution/src/main/release/samples/wsdl_first_https/src/main/java/demo/hw_https/client/ClientNonSpring.java?view=log)에 의해 제공되는 코드를 사용하고 있습니다 :

public static void setupTLS(Object port) throws FileNotFoundException, IOException, GeneralSecurityException 
{ 
    final String keyStoreLoc = "d:/certs/mykeystore.jks"; 
    HTTPConduit httpConduit = (HTTPConduit) ClientProxy.getClient(port).getConduit(); 

    TLSClientParameters tlsCP = new TLSClientParameters(); 
    final String keyPassword ="password"; 
    KeyStore keyStore = KeyStore.getInstance("JKS"); 
    keyStore.load(new FileInputStream(keyStoreLoc), keyPassword.toCharArray()); 
    KeyManager[] myKeyManagers = getKeyManagers(keyStore, keyPassword); 
    tlsCP.setKeyManagers(myKeyManagers); 

    KeyStore trustStore = KeyStore.getInstance("JKS"); 
    trustStore.load(new FileInputStream(keyStoreLoc), keyPassword.toCharArray()); 
    TrustManager[] myTrustStoreKeyManagers = getTrustManagers(trustStore); 
    tlsCP.setTrustManagers(myTrustStoreKeyManagers); 
    httpConduit.setTlsClientParameters(tlsCP); 
} 

private static TrustManager[] getTrustManagers(KeyStore trustStore) 
     throws NoSuchAlgorithmException, KeyStoreException 
{ 
    String alg = KeyManagerFactory.getDefaultAlgorithm(); 
    TrustManagerFactory fac = TrustManagerFactory.getInstance(alg); 
    fac.init(trustStore); 
    return fac.getTrustManagers(); 
} 

private static KeyManager[] getKeyManagers(KeyStore keyStore, String keyPassword) 
     throws GeneralSecurityException, IOException 
{ 
    String alg = KeyManagerFactory.getDefaultAlgorithm(); 
    char[] keyPass = keyPassword != null ? keyPassword.toCharArray() : null; 
    KeyManagerFactory fac = KeyManagerFactory.getInstance(alg); 
    fac.init(keyStore, keyPass); 
    return fac.getKeyManagers(); 
} 

디버깅, 내가 볼 수있는 경우 인증서 표시로드 및 키 스토어 및 keystrustmanagers는 일 후에 때문에, 그에 따라 채워지는 것을 무슨 일이 일어나고 있는지 알아 내려고, 나는 아이디어가 부족합니다. 그래서 도움을 줄 수있는 조언이 있다면 도와주세요.

미리 감사드립니다.

+0

다음은 도움이되는 몇 가지 테스트입니다. https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=blob;f=systests/transports/src/test/java /org/apache/cxf/systest/https/trust/TrustManagerTest.java;h=6264f447d87b7aad790ecec007ba69de43cab7c5;hb=HEAD –

답변