#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) вы найдете то, что фактически является инструментарием для создания сертификатов.
удачи !