Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSS SSLSocket选择客户端证书时出现问题_Java_Sockets_Cryptography_Nss - Fatal编程技术网

Java JSS SSLSocket选择客户端证书时出现问题

Java JSS SSLSocket选择客户端证书时出现问题,java,sockets,cryptography,nss,Java,Sockets,Cryptography,Nss,这是来自Mozilla Crypto Dev ML的交叉帖子。希望SO上的人有一些使用org.Mozilla.jss的经验 我试图分别使用两个客户端套接字和两个不同的客户端证书(客户端证书a和B)向远程主机发出两个单独的HTTPS请求。我的测试程序是 从我的主机上,我可以在两个不同的套接字上建立两个到远程主机的连接。对于这两个单独的连接,我能够从远程web服务器接收200 OK返回 我的问题是客户端证书“A”正在用于连接“A”和“B” 我一直在使用构造函数: public SSLSocket(j

这是来自Mozilla Crypto Dev ML的交叉帖子。希望SO上的人有一些使用
org.Mozilla.jss
的经验

我试图分别使用两个客户端套接字和两个不同的客户端证书(客户端证书a和B)向远程主机发出两个单独的HTTPS请求。我的测试程序是

从我的主机上,我可以在两个不同的套接字上建立两个到远程主机的连接。对于这两个单独的连接,我能够从远程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
()。此外,我在已实现的
SSLClientCertificateSelectionCallback
select()
函数中放置了一行,以便在执行回调时记录

运行我的应用程序并检查日志,select()方法在创建第一个SSLSocket(选择客户端证书“A”)期间只调用一次,在指定客户端证书B昵称时,在以后的SSLSocket实例化中从不调用。事实上,我必须重新启动我的应用程序才能再次运行
select()

当远程服务器请求证书时,是否有办法触发本机回调代码运行
select()

谢谢


PR

听起来可能正在进行一些会话缓存。你说你使用SSLSocket。您是否尝试将会话缓存设置为false?默认情况下,SSLSocket启用会话缓存


例如,在SSLSocket类中,如果在创建套接字后将pass参数设置为
false
,则有一个方法
public void useCache(boolean b)
,希望这将阻止服务器缓存第一个会话(我假设您从一个程序调用两个客户端连接)。这样,它会提示您从第二个连接请求另一个您想要的证书。

Perfect。这也有道理。当建立第二个连接时,它不会立即发送客户端证书A,因为它位于缓存中,可以发送到远程主机。