根据这个docs,我需要为我的IoT设备生成所谓的引导程序证书。我假设对于引导程序证书生成,CA证书将通过AWS SDK下载并用于生成引导程序证书。
我找不到多少合理的例子来说明如何使用java AWS SDK来做到这一点。谁能给出一个代码示例,说明我是如何做到这一点的?提前谢谢。
发布于 2019-10-16 13:59:01
我找到了解决方案。亚马逊网络服务引导程序证书是由在亚马逊网络服务IoT中注册的CA证书签署的证书。请参见workflow here。为了在java中实现这一点,我使用了Bouncy Castle库。首先,下载CA证书和CA证书私钥。并为您的引导证书生成KeyPair:
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格式。这就是全部。您可以通过mqtt将您的设备与此CA签名证书和私钥连接到亚马逊网络服务IoT。
https://stackoverflow.com/questions/58288806
复制相似问题