使用Java为AWS IoT创建自签名证书

我有一个根CA证书及其私钥(CAcert.pem和CApvtkey.key)。

已在AWS IoT核心上注册根CA证书。这将用于自签名和验证其他证书以进行身份验证。

我正在尝试使用Java创建由我的根CA证书签名的证书,但运气不是很好。

AWS IoT Java SDK提供生成证书以及在AWS上注册/激活证书的功能,但我不知道如何使用我的根CA证书签名和激活它们。

我只有这个:

  //Previous code sets up thing name etc...

  CreateThingResult resp1 = client.createThing(thingRequest);

  CreateKeysAndCertificateRequest req = new CreateKeysAndCertificateRequest();
  req.setSetAsActive(true);
  CreateKeysAndCertificateResult resp2 = client.createKeysAndCertificate(req);

  client.attachThingPrincipal(new AttachThingPrincipalRequest().
            withPrincipal(resp2.getCertificateArn()).withThingName("Java-App_Thing"));

有人知道如何创建将由CA证书签名的证书吗?

aws

所以推荐答案的文档相当模糊。我也有同样的问题。我是这样修好它的。假设您已向AWS IoT注册了您的CA, 即使您为您上载的CA启用自动注册,AWS IoT也不允许设备连接。证书将有几个选项用于JIT(准时)注册。

  1. 创建Lamba,在一定条件下激活设备;
  2. 列出MQTT上的事件以激活证书;
  3. 注册公钥。
选项1和2在AWS文档中进行了说明 https://docs.aws.amazon.com/iot/latest/developerguide/auto-register-device-cert.html

选项3的执行步骤:

  1. 注册该物品
software.amazon.awssdk.services.iot.IotClient iotClient = IotClient.create()
//This allows AWS Credentials to be picked up using DefaultAWSCredentialsProviderChain
CreateThingRequest thingToBeCreated =
CreateThingRequest.builder().thingName("Unique Id of Device").build();
iotClient.createThing(thingToBeCreated);
  1. 注册并激活设备的公钥。
RegisterCertificateRequest registerCertificateRequest = RegisterCertificateRequest.builder()
.caCertificatePem("CA Pem as String")
.certificatePem("Device Public Key in Pem as String")
.setAsActive(true)
.build();
final RegisterCertificateResponse registerCertificateResponse = iotClient.registerCertificate(registerCertificateRequest);

  1. 将证书附加到该物件。
AttachThingPrincipalRequest attachThingPrincipalRequest = AttachThingPrincipalRequest.builder()
.thingName("Unique Id of Device")
.principal(registerCertificateResponse.certificateArn())
.build();
iotClient.attachThingPrincipal(attachThingPrincipalRequest);
  1. 可选,将策略附加到该对象,使其可以连接。
AttachPolicyRequest attachPolicyRequest = AttachPolicyRequest.builder()
.policyName("policy_that_allow_device_connections")
.target(registerCertificateResponse.certificateArn())
.build();
iotClient.attachPolicy(attachPolicyRequest);

相关文章