【问题标题】:How to generate AWS bootstrap certificates with java SDK?如何使用 java SDK 生成 AWS 引导证书?
【发布时间】:2019-10-08 14:47:12
【问题描述】:

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

我找不到任何或多或少的理智示例来说明如何使用 java AWS SDK 完成此操作。任何人都可以给出我如何做到这一点的代码示例吗?提前致谢。

【问题讨论】:

    标签: java aws-sdk iot client-certificates aws-iot


    【解决方案1】:

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

    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 文件。此外,将引导证书私钥(从密钥对获取)转换为 pem 格式。就这些。您可以通过 mqtt 使用此 CA 签名证书和 AWS IoT 的私钥连接您的设备。

    【讨论】:

      猜你喜欢
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      相关资源
      最近更新 更多