2016-09-05 4 views
0

CXFを使用してサービスを使用する必要があり、次の問題に直面しています。Java Cant find信頼証明書(JKS)

私は私のJavaプログラムでそれを使用するとき、私は私のJavaキーストア(JKS)workig O SOAP UIを持っていたにもかかわらず、例えば、それは常に私がJKSファイルをチェックしてメッセージ

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

を与えるには証明書がそこにあるので、SOAPUIプロジェクトに置くと、それは問題なく認識され、サービスが正常に呼び出されます。私は次のように、ベースとしてCXF Webサイトで提供されたコード(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 –

答えて

関連する問題