如何在进行2路SSL连接时在系统属性中指定别名?

时间:2010-07-14 07:44:59

标签: ssl smartcard cac

我正在尝试运行带有2way SSL的Java客户端,它使用CAC卡作为客户端的密钥库。我在我的客户端程序中添加了以下系统属性以使其工作并更改java.security文件以添加pcks11提供程序。

System.setProperty("javax.net.ssl.keyStoreType", "pkcs11");
System.setProperty("javax.net.debug", "ssl");

程序运行正常,握手成功完成。但问题是,当我在CAC卡中有多个可信证书时,它会采用默认证书。我想指定应该用于执行客户端身份验证的证书,也可以指定别名。我没有找到任何系统属性。 请让我知道如何将别名指定为系统属性,以便2way SSL使用指定的客户端身份验证别名,或者是否有其他方法来指定别名。如果我从任何浏览器访问服务器URL,我会得到证书选择提示,并且与所选证书建立连接。

先谢谢了,

2 个答案:

答案 0 :(得分:0)

对于选择客户端证书,默认实现(sun.security.ssl.X509KeyManagerImpl,假设您正在使用Sun JRE)选择可用于请求的第一个证书。

PKCS#11是一个稍微具体的案例。据我所知,每个插槽只有一个私钥+证书链。如果PKCS#11提供程序配置中未指定任何插槽,则默认值为0。

答案 1 :(得分:0)

由于java ssl属性中没有特定属性,最好搜索支持此功能的其他现有keymanager实现,或者编写自己的自定义keymanager,以便可以选择具有别名的特定证书。

谢谢, 晴天。