AWS – createCertificateFromCsr – не удалось подключитьсяJAVA

Программисты JAVA общаются здесь
Anonymous
AWS – createCertificateFromCsr – не удалось подключиться

Сообщение Anonymous »

до сих пор мы создавали сертификат с помощью метода SDK IotClient.CreateKeysAndCertificate. И легко управлять подключением со стороны клиента с помощью закрытого ключа и сертификата с помощью SDK устройства iot

Код: Выделить всё

AwsIotMqtt5ClientBuilder.newDirectMqttBuilderWithMtlsFromPath(iotEndpoint, pemCert, pemPrivateKey);
и pemPrivateKey — это возвращаемые значения метода IotClient.CreateKeysAndCertificate.
Теперь мы хотели бы изменить создание сертификата, создав собственные ключи. и позвольте AWS только создать и зарегистрировать наш сертификат Iot, вызвав метод IotClient.createCertificateFromCsr.
Нам удалось правильно создать сертификат, используя следующий код.

Код: Выделить всё

private KeyPair generateRSAKeyPair(int keySize) throws Exception {
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", BouncyCastleFipsProviderSingleton.getInstance().getName());
// Initialize the key size
generator.initialize(keySize);
// Generate the key pair
return generator.generateKeyPair();
}

private GuardedString convertToPemFormat(Object keyOrRequest) throws Exception {
StringWriter stringWriter = new StringWriter();
try (JcaPEMWriter pemWriter = new JcaPEMWriter(stringWriter)) {
pemWriter.writeObject(keyOrRequest);
}
return stringWriter.toString();
}

// .... Our code

KeyPair keyPair = generateRSAKeyPair(keySize);

// create the CSR
X500Principal subject = new X500Principal(principleName);
PKCS10CertificationRequestBuilder csrBuilder = new JcaPKCS10CertificationRequestBuilder(subject, keyPair.getPublic());
JcaContentSignerBuilder csBuilder = new JcaContentSignerBuilder("SHA256withRSA");
PKCS10CertificationRequest csRequest = csrBuilder.build(csBuilder.build(keyPair.getPrivate()));

// convert the CSR to PEM format
String pemCsr = convertToPemFormat(csRequest);

CreateCertificateFromCsrRequest request = CreateCertificateFromCsrRequest.builder()
.certificateSigningRequest(pemCsr)
.setAsActive(true)
.build();

return getIotClient().createCertificateFromCsr(request);
Сертификат хорошо создается в AWS. Он прикрепляется к объекту и имеет необходимые политики для подключения.
Мы также преобразовали наш закрытый ключ в PEM, используя описанный выше метод.
Но когда мы пытаемся подключиться на стороне клиента с MQTT мы получаем следующую ошибку.

Код: Выделить всё

TlsContext.tls_ctx_new: Failed to create new aws_tls_ctx (aws_last_error: AWS_IO_FILE_VALIDATION_FAILURE(1038), A file was read and the input did not match the expected value)
..
Чего мне не хватает?

Подробнее здесь: https://stackoverflow.com/questions/786 ... to-connect

Вернуться в «JAVA»