X.509安全web服务的Java客户端

X.509安全web服务的Java客户端,java,web-services,security,client,x509certificate,Java,Web Services,Security,Client,X509certificate,我有远程web服务,该服务由X.509证书保护。 我生成了web服务客户端内容(使用jax ws),但需要为证书的使用配置if。 我应该如何进行? 我想我应该在本地受信任密钥库中注册证书,并设置如下内容: System.setProperty("javax.net.ssl.keyStore", keyStore); System.setProperty("javax.net.ssl.keyStoreType", "JKS"); System.setProperty("javax.net.ssl.

我有远程web服务,该服务由X.509证书保护。
我生成了web服务客户端内容(使用jax ws),但需要为证书的使用配置if。
我应该如何进行?
我想我应该在本地受信任密钥库中注册证书,并设置如下内容:

System.setProperty("javax.net.ssl.keyStore", keyStore);
System.setProperty("javax.net.ssl.keyStoreType", "JKS");
System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
System.setProperty("javax.net.ssl.trustStore", trustStore);
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword);
但不清楚应提供哪些数据作为参数。
请帮忙。

谢谢。

密钥库属性定义了向服务器标识您的证书:

System.setProperty(“javax.net.ssl.keyStore”,keyStore)

这是一个带有x509证书的java密钥库。您可以使用java程序键工具创建它

System.setProperty(“javax.net.ssl.trustStore”,trustStore)

这是一个java密钥库,具有标识网站的证书。这仅由您的web服务软件使用,以确保您真正与正确的web站点交谈

System.setProperty(“javax.net.ssl.keyStoreType”、“JKS”);
setProperty(“javax.net.ssl.trustStoreType”、“JKS”)

这只是指定javax.net.ssl.keyStore和javax.net.ssl.trustStore的格式为java keyStore

System.setProperty(“javax.net.ssl.keystrepassword”,keystrepassword);
setProperty(“javax.net.ssl.trustStorePassword”,trustStorePassword)


这是创建java密钥库时用于加密该密钥库的密码。

再加上@sstendal所说的,trustStore和keystore是物理文件,分别包含您的受信任证书和私钥。您的密钥库最好包含您的私钥,证书应该放在您的信任库中。您需要根证书颁发机构(CA-认可服务器证书的实体;例如Verisign)证书才能在信任库中完成SSL握手。感谢@sstendal提供您的答案。你描述的事情现在已经很清楚了。您还可以给我指一些如何组织整个过程的说明吗,因为我只有一个这样格式的证书:
MIICGDCCAYWgAwIBAgIQMYx/1mo3y4rdkmc7pf6itajbgurdgmchquamcixidaebgnvbamtf1jhzglvt3b0ierldmvsb3b……
我的意思是,我应该向密钥库添加什么?如果我只想调用远程WS,是否应该将其同时添加到密钥库和信任库中?看起来您有一个base64编码的证书。您可以按照此处的说明创建pem文件:。您应该使用keytool将其导入密钥库,如下所述:。再添加一条注释,您应该将自己的私有证书添加到密钥库。信任库应该包含由同时拥有web服务的一方拥有的证书。谢谢@sstendal,我是否理解正确,如果我只想访问一些受证书保护的WS,我应该按照上述方式将此证书添加到我的信任库中?然后在Java代码中,我只需要设置truststore并忘记密钥库?