这是来自 Mozilla Crypto Dev ML 的交叉帖子。希望 SO 上的人有一些使用org.mozilla.jss
. 链接:JSS-MDN
我正在尝试分别使用两个客户端套接字和两个不同的客户端证书(客户端证书 A 和 B)向远程主机发出两个单独的 HTTPS 请求。我的测试程序是SSLTest.java的修改版本
从我的主机,我可以在两个不同的套接字上与远程主机建立两个连接。对于两个单独的连接,我能够从远程 Web 服务器收到 200 OK 回复。
我的问题是客户端证书“A”同时用于连接“A”和“B”。
我一直在使用这个构造函数:
public SSLSocket(java.lang.String host,int port,
java.net.InetAddress localAddr,
int localPort,
SSLCertificateApprovalCallback certApprovalCallback,
SSLClientCertificateSelectionCallback clientCertSelectionCallback)
我还实现了接口SSLClientCertificateSelectionCallback
(source),以便使用上述构造函数并传递正确的客户端证书。另外,我在我实现的SSLClientCertificateSelectionCallback
select()
函数中放置了一行来记录执行回调的时间。
运行我的应用程序并检查日志,select() 方法仅在创建第一个 SSLSocket(选择客户端证书'A')期间调用一次,并且在指定客户端证书 B 昵称时永远不会在未来的 SSLSocket 实例化中调用。事实上,我必须重新启动我的应用程序select()
才能再次运行。
有没有办法select()
在远程服务器请求证书时触发本机回调代码运行?
谢谢,
公关