我们从客户端获得了一个.p7b格式的服务器证书链,我们需要使用Java/Scala将其导出到客户端信任存储。
他们的证书文件包含三个证书:根、中间、实际服务器.
我们怎么能用同一个别名把其中三个出口到我们的信托商店呢?
实际上是否需要用一个别名导出它们?
这就是我们目前所做的..。
//load default cacerts first in order to export the server cert
val keystore = KeyStore.getInstance(KeyStore.getDefaultType)
keystore.load(new FileInputStream(cacertsPath), decryptedPass.toCharArray)
val cf = CertificateFactory.getInstance("X.509")
//this is the server cert we are trying to export
val bais = fullStream(customTrustFile)
val certs = cf.generateCertificates(bais) --> this returns a chain of 3 certs
certs.toArray[Certificate](new Array[Certificate](certs.size())).zipWithIndex.foreach {
case (cert, i) => keystore.setCertificateEntry("api.*.*.site-" + i, cert)
// Save the new keystore contents
keystore.store(new FileOutputStream(cacertsPath),decryptedPass.toCharArray)如果您看到,我们插入证书的方式,它使用了三个带有后缀-1,-2,-3的别名,所以我们最终将三个条目插入到信任库中,不确定这是否是插入cert链的权利。
谢谢
发布于 2017-07-24 13:58:28
1.是否有办法将证书链插入到一个别名下?
不,每个受信任的证书都有一个别名。
别名标识唯一的受信任证书条目、私钥条目或秘密密钥条目。私钥条目还可以伴随相应公钥的证书链。
客户端如何找到匹配的服务器信任?它用的是别名吗?客户端是否只需要服务器根证书?还是这三个都需要?
您只需要将根证书导入信任库。不需要别名
连接期间的客户端将接收服务器证书和证书链(没有根)。它将尝试将链的最后一个证书(从叶到上)与信任库的一些证书匹配。这将验证证书的签名是否与根证书的公钥相对应。
https://stackoverflow.com/questions/45276451
复制相似问题