Я нашел решение. Сертификат начальной загрузки 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.