如何使用 java SDK 生成 AWS bootstrap 证书?

How to generate AWS bootstrap certificates with java SDK?

根据这个 docs 我需要为我的物联网设备生成所谓的 bootstrap 证书。我假设 bootstrap 证书生成 CA 证书将通过 AWS SDK 下载并用于生成 bootstrap 证书。

我找不到任何或多或少的理智示例来说明如何使用 java AWS SDK 完成此操作。谁能给我一个代码示例,说明我该怎么做?提前致谢。

我找到了解决方案。 AWS bootstrap 证书是由在 AWS IoT 注册的 CA 证书签署的证书。请参阅工作流程 here。为了在 java 中实现这一点,我使用了 Bouncy Castle 库。 首先,下载CA证书和CA证书私钥。并为您的 bootstrap 证书生成密钥对:

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

使用 Bouncy Castle 库将 CA 证书和 CA 私钥转换为 X509Certificate 和 PrivateKey 对象(参见 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)));
        }

使用 Bouncy Castle 库将证书转换为 pem 格式,将 CA 证书附加到 pem 文件。另外,将 bootstrap 证书私钥(从密钥对中获取)转换为 pem 格式。就这些。您可以使用此 CA 签名证书和私钥通过 mqtt 将您的设备连接到 AWS IoT。