加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

如何在Windows中使用Windows密钥库(MCS)?

发布时间:2020-12-14 02:49:25 所属栏目:Windows 来源:网络整理
导读:我正在尝试创建一个使用PKI进行身份验证的 Java应用程序.我需要能够从Microsoft证书存储(MCS)检索证书并将其传递到Oracle数据库(11.2). 我使用jdbc:oracle:thin驱动程序进行连接.在谷歌上花了相当长的一段时间后,我已经空了. 我发现要更改不同的属性(取决
我正在尝试创建一个使用PKI进行身份验证的 Java应用程序.我需要能够从Microsoft证书存储(MCS)检索证书并将其传递到Oracle数据库(11.2).

我使用jdbc:oracle:thin驱动程序进行连接.在谷歌上花了相当长的一段时间后,我已经空了.
我发现要更改不同的属性(取决于文章):

>设置属性javax.net.ssl.keyStoreType =“Windows-MY”
>设置javax.net.ssl.keyStore =“Windows-MY”
> javax.net.ssl.keyStore应该设置为“None”(如果使用自定义的KeyManager,我认为它不会起作用,因为它进入我的自定义KeyManager时我已经从指定的密钥库中获得了证书连接属性).

当然所有这些人都声称成功,但没有任何东西对我有用.我已经尝试了所有我没能找到运气的例子.当我使用Oracle钱包时,我能够成功进行身份验证,因此我知道我的证书很好.如果有人之前已经这样做了,并且愿意发布一些很棒的代码.

我知道大多数人都在使用带有网站的Windows密钥库,因此正在创建他们自己的SSLContext,但我无法想象我是唯一一个想用JDBC做这件事的人(据我所知,这不允许我提供它是一个SSLContext).

这是我认为应该工作的代码,但不是.

DriverManager.registerDriver)new OracleDriver());
String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=host)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=someName))(SECURITY= (SSL_SERVER_CERT_DN="CN=TESTSERVER")))";

java.util.Properties props = new java.util.Properties();
props.setProperty("javax.net.ssl.keyStoreType","Windows-MY");
props.setProperty("javax.net.ssl.keyStore","NONE");
props.setProperty("javax.net.ssl.trustStoreType","Windows-ROOT");
props.setProperty("javax.net.ssl.trustStore","NONE");

props.setProperty("oracle.net.ssl_server_dn_match","true");
props.setProperty("oracle.net.authentication_services","(TCPS)");
Connection conn = DriverManager.getConnection(url,props);

此代码失败,但有异常:

java.sql.SQLRecoverableException: IOException: The Network Adapter could not establish the connection

解决方法

This article应该提供更多详细信息.虽然它不使用系统属性,但Windows-MY显然是一种商店类型,它不是基于文件的.因此,javax.net.ssl.keyStoreType应该是Windows-MY并且javax.net.ssl.keyStore应该设置为NONE(大写可能很重要),请参阅 JSSE Ref Guide (Customization):

javax.net.ssl.keyStore system property

Note that the value NONE may be specified. This setting is appropriate if the keystore is not
file-based (for example,it resides in a hardware token).

如果默认Java信任库不信任您的服务器证书,则可能还需要以类似的方式配置信任库.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读