【发布时间】:2017-04-16 20:01:36
【问题描述】:
作为客户端,我想在 Java 中创建到 URL(SOAP 端点)的 TLS1.2 连接。
我已获得一个 PFX 文件和该文件的密码。
我不确定是否需要将 PFX 文件导入信任库或密钥库以及如何执行此操作?
创建连接的代码是什么样的?
这个问题类似,但没有解决如何将 pfx 文件放入 java 密钥系统:
Java HttpsURLConnection and TLS 1.2
我确实成功地跑了:
keytool -importkeystore -srckeystore client.pfx -srcstorestype pkcs12
-destkeystore clientcert.jks -deststoretype jks
已经制作了clientcert.jks
最终我将与服务器进行双向 TLS,但作为起点,回答这些问题会有所帮助。
我也有服务器证书。
【问题讨论】:
-
所以你已经准备好你的密钥库了。我不清楚为什么您从 PKCS#12 转换为 Java 密钥存储类型(Java 无论如何都倾向于使用 PKCS#12 作为默认值)。现在你必须设置你的信任库,除非服务器证书已经被信任,因为它是由现有的受信任的 CA 颁发的。所以去配置你的连接吧。
-
所以我将服务器证书添加到信任库?客户端证书的代码是什么样的?
-
我已经设法将 pfx 中的公共证书添加到 cacerts 文件中,答案如下:stackoverflow.com/questions/15964797/… 现在我需要一个代码 sn-p 来向我展示如何使用 URLConnection 和这个证书进行连接到网址。我假设我还需要从网站下载公钥文件才能在网站上使用 mtls。
-
您可以直接使用 PKCS#12 作为
KeyStore实例,通过加载它,这是使用您的证书和私钥来验证您自己。您还需要一个信任库(也是一个KeyStore实例)才能验证服务器的证书。同一个KeyStore实例可以充当密钥库和信任库的角色,但也可以使用单独的实例。然后,使用两个商店配置 JSSE 实现并启用客户端身份验证成为一个问题。然而,互联网上应该有很多例子可以做到这一点。