Связывание двух сертификатов с одной и той же темой

#ssl #openssl #x509certificate #corda #keytool

#ssl #openssl #x509certificate #corda #keytool

Вопрос:

Я пытаюсь сгенерировать конкретную цепочку сертификатов для использования в качестве сертификатов для узла 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 сертификатов.

Следующий шаг — экспортировать его в хранилище ключей Java с помощью keytool.

 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 идентификатор записи-закрытый ключ без остальной цепочки.

Причина в том, что cert_0 и cert_1 имеют одну и ту же тему, и keytool считает, что cert_0 является самоподписанным и, таким образом, останавливается после добавления только первого сертификата в хранилище ключей.

Итак, есть идеи о том, как создать такую цепочку сертификатов в формате JKS, где два сертификата будут иметь одну и ту же тему (с разным открытым ключом, конечно)?

Что приходит на ум, так это попытаться создать небольшую программу kotlin на основе исходных текстов Corda, но есть ли какое-либо более простое решение? Может быть, какой-нибудь хак для keytool или что-то в этом роде

Ответ №1:

В этом есть несколько важных аспектов, о которых следует знать, поскольку в настоящее время развертывание ваших собственных сертификатов не поддерживается в определенных типах сетей corda.

если вы делаете это на своем собственном компьютере с загрузочной сетью, я бы не рекомендовал этого делать, поскольку вы можете просто использовать сертификаты разработчика corda от bootstrapper.

Если вы делаете это для производства или используете свой собственный PKI, вы должны иметь возможность сделать это с помощью CENM (ссылка здесь: 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 ) и CertificatesUtils.kt (https://github.com/corda/corda/blob/master/node/src/main/kotlin/net/corda/node/utilities/CertificatesUtils.kt) вы найдете то, что фактически является инструментарием для создания сертификатов.

удачи !