java - JSS SSLSocket 问题选择客户端证书

标签 java sockets cryptography nss

这是来自 Mozilla Crypto Dev ML 的交叉帖子。希望 SO 上的某个人有一些使用 org.mozilla.jss 的经验。 Link: JSS - MDN

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

在我的主机上,我能够在两个不同的套接字上建立到远程主机的两个连接。对于两个单独的连接,我都能够从远程 Web 服务器收到 200 OK 返回。

我的问题是客户端证书“A”同时用于连接“A”和“B”。

我一直在使用 this构造函数:

public SSLSocket(java.lang.String host,int port, 
java.net.InetAddress localAddr, 
int localPort, 
SSLCertificateApprovalCallback certApprovalCallback, 
SSLClientCertificateSelectionCallback clientCertSelectionCallback)

我还实现了接口(interface) SSLClientCertificateSelectionCallback ( source ),以便使用上述构造函数并传递正确的客户端证书。此外,我在已实现的 SSLClientCertificateSelectionCallback select() 函数中放置了一行,以在执行回调时进行记录。

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

当远程服务器请求证书时,有什么方法可以触发 native 回调代码运行 select() 吗?

谢谢,

公关

最佳答案

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

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

关于java - JSS SSLSocket 问题选择客户端证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7338529/

相关文章:

rest - Docker API 返回 200 OK 然后 400 BAD REQUEST

cryptography - 多个 sha1 哈希的 Sha1 哈希 -> 安全识别文件?

cryptography - 由于缺少公钥,使用 rvm 安装 ruby​​s 时出现问题

java - Wicket:在提交时更改 AjaxButton 的文本

java - 当 JAVA 应用程序连接到 Docker 中的 Postgres 时,未加载 JDBC 驱动程序类

c++ - 通过 C++ 套接字发送 std::map<int, std::map<std::string, double>> (linux)

c - 为什么在 tcp 套接字上写入会阻塞?

java - 如何在 Google Dataflow 中组合两组不同的标识符?

java - 极慢的 Netezza(数据库)批量插入

node.js - 使用模块 'crypto' 对十六进制数据进行 NodeJS DES ECB 加密