【问题标题】:Create a trusted ssl handshake with server using Java使用 Java 创建与服务器的可信 ssl 握手
【发布时间】:2013-01-14 17:59:28
【问题描述】:

我需要帮助,使用 Axis2 和 org.jsslutils.sslcontext.X509SSLContextFactory 创建与 Web 服务的可信连接。我从 Web 服务的管理控制台 (client.p12) 生成了一个客户端证书。我还通过转到端点 uri 并使用浏览器 (pubserver.cer) 将其导出到文件来获取服务器的公共证书。我使用 keytool (mywsks.jks) 将 client.p12 转换为 jks。我还将 pubserver.cer 导入到密钥库中。我对 ssl 很陌生。我是否需要将这些证书导入到 .../jre/lib/security/cacert 或 cacerts 或trusted.libraries,或者我可以只引用 mywsks.jks 吗?如何使用 X509SSLContextFactory 为服务器设置我的代码以信任我?它似乎需要一个 keyStore 和一个 trustStore ,我从这个例子中得到:

X509SSLContextFactory sslContextFactory = new X509SSLContextFactory( 
    keyStore, keyStorePassword, trustStore); 

我目前正在使用它来创建 keyStore 和 trustStore:

KeyStore keyStore = KeyStore.getInstance("JKS");     
String keyStoreFile = "mywsks.jks"; 
InputStream keyInput = new FileInputStream(keyStoreFile);
String keyStorePassword = "thepassword"; 
keyStore.load(keyInput, keyStorePassword.toCharArray());
keyInput.close();

String trustStoreFile = "/path/to/cacert"; 
KeyStore trustStore = KeyStore.getInstance("JKS");
keyInput = new FileInputStream(trustStoreFile);
String trustStorePassword = "thepassword";
trustStore.load(keyInput, trustStorePassword.toCharArray());
keyInput.close();

我收到以下错误:

org.apache.axis2.AxisFault: sun.security.validator.ValidatorException: No trusted certificate found

【问题讨论】:

    标签: java web-services ssl axis2


    【解决方案1】:
    1. 将用于在 Web 服务中进行身份验证的客户端证书添加到 keyStore(client.p12) 中。
    2. 将服务器的公钥 (pubserver.cer) 添加到您的 trustStore。可以是/jre/lib/security/cacert

    您能发布您面临的问题吗?因为在我看来,这是一个令人困惑且需要讨论的大话题..

    这个例子将帮助你实现这个..

    http://code.google.com/p/jsslutils/wiki/ApacheHttpClientUsage

    最后你可以建立一个 URL 连接..

    【讨论】:

    • 我的问题主要是关于如何设置 keyStore/trustStore 变量以及将哪个证书放在哪里。我想你可能已经回答过了。我要试试看。
    • @Sravana Kumar 我将 pubserver.cer 放入 cacert。我将client.p12 转换为mywsks.jks。请查看我对结果所做的修改。
    • 我遇到的第一个问题是我的 jks 和 p12 没有相同的密码。在将 p12 转换为 jks 时,这显然很重要。我遇到的第二个问题是通过将 pubserver.cer 放入 /jre/lib/security/cacert 来解决的。非常感谢。我的问题已解决。
    • 酷.. 也不需要将您的 p12 密钥库转换为 jks。您可以使用KeyStore.getInstance("PKCS12") 获取实例。内部发生的是,服务器提供公钥,客户端使用信任库进行验证,然后客户端提供证书进行身份验证,服务器使用服务器中的密钥库对其进行验证。还有一个信息:您可能需要定期更改密钥库,直到您的项目完成。所以记住步骤:)
    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多