我在一个Java密钥库中有两个证书/密钥对,它们的别名是“foo”和“bar”。
我的TLS客户端(Java程序)使用密钥库。TLS客户端身份验证在连接打开期间完成。当TLS服务器从客户端请求证书时,客户端程序应该使用“foo”密钥输入。现在,客户端在连接握手期间向服务器发送错误的证书(“bar”)。
如何在连接之前告诉SSLSocket
想要的密钥条目的别名?
当前代码如下:
final SSLSocket ss = (SSLSocket)SSLSocketFactory.getDefault().createSocket();
ss.setEnabledProtocols( new String[] {"TLSv1"});
ss.connect( targetAddress );
字符串
1条答案
按热度按时间hgqdbh6s1#
默认的
KeyManager
将发送它找到的第一个与服务器请求的条件相匹配的证书,也就是说,它将发送它找到的第一个证书,它可以为服务器在请求期间发送的CA名称之一建立证书链。如果你总是想选择一个特定的别名,你需要实现你自己的
X509KeyManager
,可能会 Package 默认的管理器。沿着这些行应该可以工作(没有测试这个实际的代码,可能有一些错别字):字符串
然后将其用于
SSLContext
:型