【问题标题】:Java Cant find Trusted Certificate (JKS)Java 找不到受信任的证书 (JKS)
【发布时间】:2016-09-07 03:36:26
【问题描述】:

我需要使用 CXF 使用服务,我面临以下问题。

即使我有我的 Java 密钥存储 (JKS) 工作 SOAP UI,例如,当我在我的 Java 程序上使用它时,它总是给我消息

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

我检查了JKS文件,证书在里面,所以当我把它放在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();
}

调试时,我可以看到证书已加载,并且相应地填充了密钥库和密钥信任管理器,因此经过几天试图弄清楚发生了什么,我已经没有想法了。所以如果你们有任何可以帮助的提示,请帮助我。

提前致谢。

【问题讨论】:

标签: web-services ssl certificate cxf jks


【解决方案1】:

在运行了更多测试后,很明显证书是问题所在。我将 jks 更改为有效的,现在它运行完美。

对于那些需要这样的解决方案的人,我的解决方案 (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) 的示例就像一个魅力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 2018-12-12
    • 2019-02-26
    • 2021-11-10
    相关资源
    最近更新 更多