将服务器信任证书链导出到一个别名下的Truststore

时间:2017-07-24 09:06:39

标签: java ssl tls1.2 truststore

我们从客户端获得了.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的别名,因此我们最终在信任库中插入三个条目,不确定这是否是插入证书的权利链..

  1. 有没有办法在单个别名下插入证书链?

  2. 客户端如何找到匹配的服务器信任?它是否使用别名?客户端也只需要服务器根证书吗?还是需要全部三个?

  3. 由于

1 个答案:

答案 0 :(得分:1)

  

1.有没有办法在单个别名下插入证书链?

不,每个可信证书都有一个别名

别名标识唯一的可信证书条目,私钥条目或密钥条目。私钥条目还可以附带相应公钥的证书链。

  

2客户端如何找到匹配的服务器信任?它是否使用别名?客户端也只需要服务器根证书吗?还是需要全部三个?

您只需将根证书导入信任库即可。别名不需要

连接期间的客户端将收到服务器证书和证书链(没有root)。它将尝试匹配链的最后一个证书,从leaf到upper,以及一些truststore的证书。这样做是为了验证证书的签名是否与根证书的公钥

相对应