Otr*_*tra 5 java authentication wsdl keystore
所以我在这里遇到了一些问题,使用wsdls并在java中选择多个证书.例如,智能卡上有多个证书,用于签名,加密和识别.我有一个WSDL为客户端auth连接生成代码,但据我所知,你通过设置属性给wsdl一个到密钥库的路径,就像这样
System.setProperty("javax.net.ssl.keyStore",
keyStore);
System.setProperty("javax.net.ssl.keyStorePassword",
keyStorePassword);
Run Code Online (Sandbox Code Playgroud)
我正在学习本教程.现在,对于密钥库中的多个证书(如智能卡),这会产生问题,因为无法在该智能卡上指定要使用的WHICH证书.看起来wsdl选择了密钥库中的第一个证书,这可能是要进行身份验证的错误证书.
我的问题是双重的:
有没有办法System.setProperty告诉wsdl使用哪个证书?我可以做些什么来指定哪个证书,因为大多数代码是由wsdl使用生成的wsconsume?
将System.setProperty()只允许您指定的路径.有没有办法指定一个对象?我从智能卡获取证书的方式是使用SunPKCS11类(如此处所示).但是,这会返回给我一个keystore对象,据我所知System.setProperty()想要一个路径.
谢谢你的帮助!
我终于找到了我的问题的答案。请记住,我正在使用 CXF。
因此,当我在 wsdl 上调用 wsdl2java 时,我会得到一堆生成的代码。有两个特别处理授权的部分,恰当地命名为 Authorization 和 AuthorizationService。在我的代码中,为了调用这些链接,我执行以下操作
AuthorizationService authSvc = new AuthorizationService();
Authorization authWs = authSvc.getAuthorizationPort();
Run Code Online (Sandbox Code Playgroud)
此时,您需要通过从所选证书创建新的密钥库来构建您自己的 keyManager 和 trustmanager。这是一个很好的起点
然后需要构造TLSClientParameters
TLSClientParameters params = new TLSClientParameters();
params.setKeyManagers(keyManagers);
params.setTrustManagers(trustManagers);
Run Code Online (Sandbox Code Playgroud)
然后创建您的 HTTPConduit。
HTTPConduit conduit = (HTTPConduit) ClientProxy.getClient(authWs).getConduit();
conduit.setTlsClientParameters(params);
Run Code Online (Sandbox Code Playgroud)
然后您可以将您的网络服务与您的用户选择的证书一起使用。
| 归档时间: |
|
| 查看次数: |
1188 次 |
| 最近记录: |