我们从客户端获得了.p7b格式的服务器证书链,我们需要使用Java / Scala API导出到我们的客户端信任库
他们的证书文件包含三个证书:root,intermediate,actual server ......
我们如何在相同的别名下将其中三个导出到我们的信任存储区?
实际上是否需要将它们导出到一个别名下?
这是我们到目前为止所做的......
//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的别名,因此我们最终在信任库中插入三个条目,不确定这是否是插入证书的权利链..
有没有办法在单个别名下插入证书链?
客户端如何找到匹配的服务器信任?它是否使用别名?客户端也只需要服务器根证书吗?还是需要全部三个?
由于
答案 0 :(得分:1)
1.有没有办法在单个别名下插入证书链?
不,每个可信证书都有一个别名
别名标识唯一的可信证书条目,私钥条目或密钥条目。私钥条目还可以附带相应公钥的证书链。
2客户端如何找到匹配的服务器信任?它是否使用别名?客户端也只需要服务器根证书吗?还是需要全部三个?
您只需将根证书导入信任库即可。别名不需要
连接期间的客户端将收到服务器证书和证书链(没有root)。它将尝试匹配链的最后一个证书,从leaf到upper,以及一些truststore的证书。这样做是为了验证证书的签名是否与根证书的公钥
相对应