如何解决我可以在 Java 应用程序中从 Windows KeyStore 中选择一个证书进行相互身份验证吗?
我正在开发一个基于 Java 的应用程序,以测试如何扩展没有证书处理的当前应用程序(https 连接是新的)。我发现/编写了这段代码,它正在执行代码的目的(也就是通过相互身份验证连接到服务器),但是证书应该对用户隐藏,因此它应该安装在 Windows KeyStore 中。>
System.setProperty("javax.net.ssl.keyStoreType","PKCS12");
System.setProperty("javax.net.ssl.keyStore","./ClientCert.pfx");
System.setProperty("javax.net.debug","ssl");
System.setProperty("javax.net.ssl.keyStorePassword","Password1");
try{
SSLSocketFactory sslsocketfactory = (SSLSocketFactory)
SSLSocketFactory.getDefault();
URL url = new URL("https://example.com/");
HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
conn.setSSLSocketFactory(sslsocketfactory);
InputStream inputstream = conn.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
String string = null;
while((string = bufferedreader.readLine()) != null){
System.out.println("Recived " + string);
}
} catch (Exception e) {
e.printStackTrace();
}
我找到的唯一解决方案是将 KeyStore 用作 TrustStore,但是从 KeyStore 中选择证书无处可寻,尽管它应该是可行的,因为此代码是在 Store 中选择搜索证书。
KeyStore ks = KeyStore.getInstance("WINDOWS-MY");
ks.load(null,null);
Enumeration<String> en = ks.aliases();
while(en.hasMoreElements()){
String aliasKey = en.nextElement();
X509Certificate c = (X509Certificate) ks.getCertificate(aliasKey);
System.out.println("alias: " + aliasKey);
System.out.println("cert: " + c.getSubjectX500Principal().toString());
}
所以我应该以某种方式将两者结合起来,通过别名从 Windows KeyStore 中选择一个证书,并将其作为相互身份验证。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。