Как создать сертификаты начальной загрузки AWS с помощью Java SDK? - PullRequest
1 голос
/ 08 октября 2019

В соответствии с этим документами мне необходимо создать так называемые сертификаты начальной загрузки для моих устройств IoT. Я предполагал, что для генерации сертификатов начальной загрузки сертификат CA будет загружен через AWS SDK и использован для создания сертификата начальной загрузки.

Я не могу найти более или менее вменяемый пример того, как это можно сделать с помощью Java AWS SDK. Может кто-нибудь привести пример кода, как я могу это сделать? Заранее спасибо.

1 Ответ

0 голосов
/ 16 октября 2019

Я нашел решение. Сертификат начальной загрузки AWS - это сертификат, подписанный сертификатом CA, зарегистрированным в IoT AWS. Смотрите рабочий процесс здесь . Чтобы реализовать это в Java, я использовал библиотеку Bouncy Castle. Сначала загрузите сертификат CA и закрытый ключ сертификата CA. И сгенерируйте KeyPair для вашего сертификата начальной загрузки:

KeyPairGenerator keypairGen = KeyPairGenerator.getInstance("RSA");
    keypairGen.initialize(2048, random);
    KeyPair keypair = keypairGen.generateKeyPair();
    PublicKey publicKey = keypair.getPublic();

Преобразуйте сертификат CA и закрытый ключ CA в объекты X509Certificate и PrivateKey с помощью библиотеки Bouncy Castle (см. Примеры в book ). Создайте сертификат:

public X509Certificate makeV3Certificate(
                                          X509Certificate caCertificate,
                                          PrivateKey caPrivateKey,
                                          PublicKey publicKey) 
throws GeneralSecurityException, CertIOException, OperatorCreationException {
    X509v3CertificateBuilder v3CertBuilder = new JcaX509v3CertificateBuilder(
            caCertificate.getSubjectX500Principal(), // issuer
            BigInteger.valueOf(System.currentTimeMillis()) // serial number
                    .multiply(BigInteger.valueOf(10)),
            new Date(System.currentTimeMillis() - 1000 * 5), // start time
            new Date(System.currentTimeMillis() + 1000 * 3600 * 3), // expiry time
            new X500Principal(String.format("CN=%s", "desirable Common Name")), // subject
            publicKey); // subject public key

    JcaX509ExtensionUtils extUtils = new JcaX509ExtensionUtils();

        v3CertBuilder.addExtension(
                Extension.subjectKeyIdentifier,
                false,
                extUtils.createSubjectKeyIdentifier(publicKey));
        v3CertBuilder.addExtension(
                Extension.authorityKeyIdentifier,
                false,
                extUtils.createAuthorityKeyIdentifier(caCertificate));
        v3CertBuilder.addExtension(
                Extension.basicConstraints,
                true,
                new BasicConstraints(false));
        JcaContentSignerBuilder signerBuilder = new JcaContentSignerBuilder("SHA256withRSA");

        return new JcaX509CertificateConverter().getCertificate(v3CertBuilder.build(signerBuilder.build(caPrivateKey)));
        }

Преобразуйте сертификат в формат pem с помощью библиотеки Bouncy Castle, прикрепите сертификат CA к файлу pem. Кроме того, преобразуйте закрытый ключ сертификата начальной загрузки (получить из пары ключей) в формат pem. Вот и все. Вы можете подключить свое устройство через mqtt с этим сертификатом, подписанным CA, и с закрытым ключом к AWS IoT.

...