【发布时间】:2011-09-23 10:37:10
【问题描述】:
我正在构建一个 JAVA Web 服务客户端,我在其中连接到一个服务。
此服务具有 ssl 证书验证。
如何使用 ssl 证书验证调用此服务。
我在使用 Eclipse 构建的客户端中使用 JAX-RPC 实现。
举个例子。
【问题讨论】:
标签: java web-services xml-rpc rpc
我正在构建一个 JAVA Web 服务客户端,我在其中连接到一个服务。
此服务具有 ssl 证书验证。
如何使用 ssl 证书验证调用此服务。
我在使用 Eclipse 构建的客户端中使用 JAX-RPC 实现。
举个例子。
【问题讨论】:
标签: java web-services xml-rpc rpc
您需要做的就是使用以下命令行将服务器根证书注入您的 JDK/JRE 环境:-
keytool -importcerts -trustcacerts -file <path_to_root_cer_file> -alias <the_server_alias> -keystore <your_keystore>
默认的 [your_keystore] 是
1. <JDK_HOME>/jre/lib/security/cacerts
2. <JRE_HOME>/lib/security/cacerts
默认密码是changeit。
当您调用网络服务时,只需提及
"https://<host>:<SSL_port>/Path/To/Services"
我希望这可能有助于实现您的要求。
问候,
查理·Ch.
【讨论】:
您的意思是您的网络服务受到“客户端证书”的保护?如果是,请从服务提供商处获取 .p12 (PFX) 或密钥库格式的证书,并在调用之前使用以下系统属性进行设置:
javax.net.ssl.keyStore - 服务器上密钥库的路径
javax.net.ssl.keyStorePassword - 该密钥库的密码
javax.net.ssl.keyStoreType - 将其设置为“pkcs12”是提供给您的客户端证书是.p12
如果您的应用程序仅是一个 Web 服务提供商的客户端,请将这些属性设置为 VM 参数,如果不是,您可能需要为每个安全端点创建特定的 SSLConnectionFactory。有关创建自定义 SSL 套接字工厂的详细信息,请参阅我对 post 的回复。
【讨论】:
我可以进行网络服务连接...
我使用以下命令添加了密钥库:
keytool -import -trustcacerts -file <file path/filename.cer> -alias <aliasName> -keystore <JAVA_HOME/jre/lib/security/cacerts>
将密码设为“changeit”并在密钥库中添加证书。
现在我在代码中添加了两行:
System.setProperty("javax.net.ssl.trustStore", "<JAVA_HOME>/jre/lib/security/cacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
还添加了
_call.setUsername("username");
_call.setPassword("password");
其中 _call 是 Call Class 的调用对象。
它成功了!!!!!!
【讨论】: