链接具有相同主题的两个证书
Chaining two certs with the same subject
我正在尝试生成特定的证书链以用作 Corda 节点的证书。
证书结构如下
cert_0 -> Subject: Node DN (Legal identity cert)
cert_1 -> Subject: Node DN (Node CA cert)
cert_2 -> Subject: Doorman CA
cert_3 -> Subject: Network Root CA
我已经生成了所有证书,然后尝试分两步将它们链接起来:
openssl pkcs12 -export -chain -CAfile nodedoormanrootca.pem -in identity-cert.pem -inkey identity-key.pem -out identity.p12 -name identity-private-key -passout pass:changeit
第 1 步工作正常,结果我得到了包含所有 4 个证书的证书包。
下一步是使用 keytool 将其导出到 Java 密钥库。
keytool -v -importkeystore -providerpath bcprov-jdk15on-1.66.jar -provider org.bouncycastle.jce.provider.BouncyCastleProvider -srckeystore identity.p12 -srcstoretype PKCS12 -destkeystore nodekeystore.jks -deststorepass changeit -srcstorepass changeit -alias "identity-private-key"
(我使用 Bouncy Castle 提供程序,因为 cert_0 使用 ed25519 密钥)
问题 是在导入 keytool 之后我只有 1 个条目 identity-private-key 没有链的其余部分。
原因是 cert_0 和 cert_1 具有相同的主题,并且 keytool 认为 cert_0 是自签名的,因此在密钥库中仅添加第一个证书后停止。
那么,关于如何以 JKS 格式创建这样的证书链,其中两个证书将具有相同的主题(当然具有不同的 public 密钥)有什么想法吗?
想到的是尝试基于 Corda 源创建一些小的 kotlin 程序,但是有没有更简单的解决方案?也许对 keytool 或 smth
有一些破解
有一些重要方面需要注意,因为某些类型的 corda 网络目前不支持滚动您自己的证书。
如果您在自己的机器上使用引导网络执行此操作,我建议您不要这样做,因为您可以只使用引导程序的 corda 开发者证书。
如果您这样做是为了生产或使用您自己的 PKI,您应该可以使用 CENM(link 此处:https://docs.corda.net/docs/cenm/1.3/pki-tool.html)
没有演示如何创建这些证书的示例项目。但是,如果您下载 Corda 源代码并查看 X509Utilities.kt(https://github.com/corda/corda/blob/master/node-api/src/main/kotlin/net/corda/nodeapi/internal/crypto/X509Utilities.kt) and CertificatesUtils.kt (https://github.com/corda/corda/blob/master/node/src/main/kotlin/net/corda/node/utilities/CertificatesUtils.kt),您会发现它实际上是一个用于创建证书的工具包。
祝你好运!
我正在尝试生成特定的证书链以用作 Corda 节点的证书。 证书结构如下
cert_0 -> Subject: Node DN (Legal identity cert)
cert_1 -> Subject: Node DN (Node CA cert)
cert_2 -> Subject: Doorman CA
cert_3 -> Subject: Network Root CA
我已经生成了所有证书,然后尝试分两步将它们链接起来:
openssl pkcs12 -export -chain -CAfile nodedoormanrootca.pem -in identity-cert.pem -inkey identity-key.pem -out identity.p12 -name identity-private-key -passout pass:changeit
第 1 步工作正常,结果我得到了包含所有 4 个证书的证书包。
下一步是使用 keytool 将其导出到 Java 密钥库。
keytool -v -importkeystore -providerpath bcprov-jdk15on-1.66.jar -provider org.bouncycastle.jce.provider.BouncyCastleProvider -srckeystore identity.p12 -srcstoretype PKCS12 -destkeystore nodekeystore.jks -deststorepass changeit -srcstorepass changeit -alias "identity-private-key"
(我使用 Bouncy Castle 提供程序,因为 cert_0 使用 ed25519 密钥)
问题 是在导入 keytool 之后我只有 1 个条目 identity-private-key 没有链的其余部分。
原因是 cert_0 和 cert_1 具有相同的主题,并且 keytool 认为 cert_0 是自签名的,因此在密钥库中仅添加第一个证书后停止。
那么,关于如何以 JKS 格式创建这样的证书链,其中两个证书将具有相同的主题(当然具有不同的 public 密钥)有什么想法吗?
想到的是尝试基于 Corda 源创建一些小的 kotlin 程序,但是有没有更简单的解决方案?也许对 keytool 或 smth
有一些破解有一些重要方面需要注意,因为某些类型的 corda 网络目前不支持滚动您自己的证书。
如果您在自己的机器上使用引导网络执行此操作,我建议您不要这样做,因为您可以只使用引导程序的 corda 开发者证书。
如果您这样做是为了生产或使用您自己的 PKI,您应该可以使用 CENM(link 此处:https://docs.corda.net/docs/cenm/1.3/pki-tool.html)
没有演示如何创建这些证书的示例项目。但是,如果您下载 Corda 源代码并查看 X509Utilities.kt(https://github.com/corda/corda/blob/master/node-api/src/main/kotlin/net/corda/nodeapi/internal/crypto/X509Utilities.kt) and CertificatesUtils.kt (https://github.com/corda/corda/blob/master/node/src/main/kotlin/net/corda/node/utilities/CertificatesUtils.kt),您会发现它实际上是一个用于创建证书的工具包。
祝你好运!