【发布时间】:2015-06-16 17:53:15
【问题描述】:
我们正在尝试建立一种 MUTUAL/2WAY 身份验证机制。
因为我们访问了两个不同的主机,所以我们在客户端密钥库容器中以两个不同的别名存储了相同的客户端证书(请注意相同的指纹):
root@perf-golem-4:/opt/golem# keytool -list -keystore ./client.keystore -storepass ________
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 2 entries
i.domain.io, Jun 16, 2015, trustedCertEntry,
Certificate fingerprint (SHA1): 28:94:45:A1:78:C0:BD:D6:82:7E:09:66:15:11:8D:A5:56:0B:99:39
r.domain.io, Jun 16, 2015, trustedCertEntry,
Certificate fingerprint (SHA1): 28:94:45:A1:78:C0:BD:D6:82:7E:09:66:15:11:8D:A5:56:0B:99:39
现在,在受信任的容器下,我们拥有目标域证书(请注意它们之间的指纹有何不同,并与上面的密钥库进行比较):
root@perf-golem-4:/opt/golem# keytool -list -keystore ./trusted.keystore -storepass _______
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 2 entries
i.domain.io, Jun 16, 2015, trustedCertEntry,
Certificate fingerprint (SHA1): 73:F5:96:68:89:56:5E:50:9C:06:69:67:AC:8E:18:D2:D9:C1:33:71
r.domain.io, Jun 16, 2015, trustedCertEntry,
Certificate fingerprint (SHA1): 12:93:C8:41:3F:68:22:8F:40:F8:3C:B9:B6:C4:90:C0:60:49:D0:50
我的理解是,如果您必须存储具有与目标域名匹配的别名的证书(在我们的例子中为 i.domain.io 或 r.domain.io),那么 java 可以在以下情况下提供关联的证书作为客户端证书您正在尝试与该域建立 SSL 连接,例如https://r.domain.io
我们正在像这样启动我们的应用程序:
java -Djavax.net.debug=all \
-Djavax.net.ssl.keyStore=/opt/golem/client.keystore \
-Djavax.net.ssl.keyStorePassword=_____ \
-Djavax.net.ssl.trustStore=/opt/golem/trusted.keystore \
-Djavax.net.ssl.trustStorePassword=_____ \
我们的问题是没有客户端证书被提供或从客户端使用,所以,最大的问题是 java 是否提供与目标域名(或目标 SSL 证书中的主题行)匹配的别名关联的客户端证书) 或者证书的名称应该从代码中删除?
【问题讨论】:
-
别名与目标域无关。您不需要同一证书的多个副本。
标签: java ssl https ssl-certificate