Verifying device credentials
ClearBlade IoT Core offers per-device public/private key authentication using JSON Web Tokens (JWTs). ClearBlade IoT Core can verify device public key certificates against registry-level CA certificates for additional security.
A verified certificate attests that a public/private key pair belongs to a legitimate device. This can be especially useful when the device manufacturer creates public and private keys, stores the private key on the device, and has the public key signed by the CA.
Generating CA certificates
ClearBlade IoT Core can verify device public key certificates against self-signed CA certificates and CA certificates generated by a trusted third party. Both CA certificates are used the same way but are generated differently.
Self-signed CA certificates | Third-party CA certificates |
---|---|
Device private key owners can generate the certificates. | A trusted third party must generate the certificates. |
Device private key owners create and own the CA private keys that sign the certificates. | A third party creates and owns the CA private keys that sign the certificates. |
The certificates are free to generate. | Third parties bill to generate certificates and establish CA chain of trust. |
Self-signed CA certificates
Generate a self-signed CA certificate
1. Create a CA private key. It will be uniquely associated with the CA certificate. You can generate a 2048-bit RSA private key with this command:
openssl genpkey -algorithm RSA -out ca_private.pem -pkeyopt rsa_keygen_bits:2048
2. Generate the self-signed CA certificate. This command generates an RS256 certificate that meets the CA certificate requirements:
openssl req -x509 -new -nodes -key ca_private.pem -sha256 -out ca_cert.pem -subj "/CN=unused"
See Generating an RSA key with a self-signed X.509 certificate or Generating an ES256 key with a self-signed X.509 certificate for more examples.
Third-party CA certificates
To get a CA certificate from a trusted third party, submit a CSR to the CA. The CA then sends you a CA certificate with the corresponding device public key certificate, signed by the CA private key.
Get third-party CA certificates
1. Create a device private key. You can generate a 2048-bit RSA private key with this command:
openssl genpkey -algorithm RSA -out rsa_private.pem -pkeyopt rsa_keygen_bits:2048
2. Create a CSR from the device private key. The CSR keeps the private key secret. This command generates a CSR with an SHA-256 signature:
openssl req -new -sha256 -key rsa_private.pem -out rsa_cert.csr -subj "/CN=unused"
3. Send the CSR to a CA and apply for a certificate. Each CA has a different application process. For instance, you may need to register an account with the CA and upload the CSR to an online portal.
CA certificate requirements
All registry-level CA certificates must meet these requirements:
The CA certificate must be in the X.509v3 (RFC 5280) format, encoded in base64, and wrapped in
-----BEGIN CERTIFICATE-----
and-----END CERTIFICATE-----
.The CA certificate must be a
.pem
file encrypted with a supported algorithm:RSA with at least 2048 bits
NIST P-256
The CA certificate must be valid. If you try to add a device to a registry and the certificate has expired, ClearBlade IoT Core returns an error.
Adding CA certificates to a registry
Once you have CA certificates, add them to a registry. ClearBlade IoT Core verifies CA certificates at the registry level, so all CA certificates must be associated with a registry. A certificate can be added to multiple registries.
Console
1. Go to the Registries page.
2. At the top of the page, click Create Registry.
3. Click Add CA certificate to type/paste a certificate or upload a certificate .pem
file. You can add only one certificate when creating the registry, but you can add more certificates later (up to 10).
The Device registry details page includes a Certificates tab that shows the existing certificates and allows you to add more.
API
The DeviceRegistry resource includes fields for defining CA certificates at the registry level:
Up to 10 credentials (RegistryCredential objects) can be defined for device credential verification.
Each RegistryCredential object encompasses a PublicKeyCertificate object you can use to specify certificate data. An output-only field provides X.509 certificate details.
Effect on existing devices
When you add or remove certificates, existing devices in the registry (whether connected or not) are unaffected. Suppose a device's associated registry-level certificates are revoked, deleted, or modified. In that case, the device can't use the same public key certificates when the registry-level certificates are in force. However, it can still connect to ClearBlade IoT Core with its private key.
Generating public key certificates
ClearBlade IoT Core verifies device public key certificates signed by CA private keys.
To generate a signed public key certificate:
If the registry is configured with a self-signed CA certificate, sign a public key with the CA private key.
Create a device private key. This key is different than the CA certificate and CA private key. You can generate a 2048-bit RSA private key with this command:
CODEopenssl genpkey -algorithm RSA -out rsa_private.pem -pkeyopt rsa_keygen_bits:2048
Create a CSR from the device private key. This command generates a CSR with an SHA-256 signature:
CODEopenssl req -new -sha256 -key rsa_private.pem -out rsa_cert.csr -subj "/CN=unused-device"
Create a public key and sign it with the CA private key. This command generates a signed RS256 certificate that meets the public key certificate requirements:
CODEopenssl x509 -req -in rsa_cert.csr -CA ca_cert.pem -CAkey ca_private.pem \ -CAcreateserial -sha256 -out rsa_cert.pem
If a registry is configured with a third-party CA certificate, the CA certificate contains a device public key certificate signed by the CA private key. You can extract an RSA device public key certificate from an RSA CA certificate with this command:
CODEopenssl rsa -in ca_cert.pem -pubout -out rsa_cert.pem
Public key certificate requirements
Device public key certificates must meet these requirements (in addition to the standard ClearBlade IoT Core requirements for device credentials) to verify them against registry-level CA certificates:
The CA certificate must be in the X.509v3 (RFC 5280) format, encoded in base64, and wrapped in
-----BEGIN CERTIFICATE-----
and-----END CERTIFICATE-----
.A specific CA certificate must sign the device public key certificate at the registry level; intermediary CAs are not supported.
The device public key certificate must not be identical to the registry-level certificate.
No raw public keys.
Supported JWT algorithms:
The device public key certificate must be valid. If you try to create or update a device with an expired certificate, ClearBlade IoT Core returns an error.
These requirements are enforced when you create or update the device. If a registry has no CA certificates defined for it, all device public keys are unconditionally accepted.
Verifying public key certificates
ClearBlade IoT Core verifies device public key certificates against registry-level CA certificates when you create a device or modify its public keys.
Console
1. Go to the Registries page.
2. Click the device’s registry ID.
3. In the left registry menu, click Devices.
4. Click Create a device.
To modify a device's public keys, click the device's ID on the Devices page and click Edit device at the top.
5. Enter a device ID that describes the device or helps you identify it (this field can't be edited later).
6. For Device communication, select Allow or Block. The latter allows you to block communication when needed, such as when a device malfunctions. You'll most likely want to enable communication when creating the device.
7. For Public key format, select RS256_X509 or ES256_X509. Paste the device public key certificate in the Public key value field. You can also set the key’s expiration date.
To add a key to an existing device, click Add public key on the Device details page.
To remove a key from an existing device, check the box next to the key on the Device details page and click Delete to remove it.
To edit a key, click the Edit icon next to the key on the Device details page.
8. Select the input method you want to use to enter the device public key certificate.
Manual: Copy and paste the device public key certificate into the Public key value field.
Upload: In the Public key value field, click Browse to select a file on your device.
9. Use the Key and Value fields to add optional device metadata, such as a serial number.
10. Select a Cloud Logging level to determine which device events are sent to Cloud Logging.
11. Click Submit to create the device.
API
Use these methods to create devices or modify public keys:
Device create method to add devices to registries
Device patch method to add, remove, or edit public keys
Public keys are specified in the Device
resource’s credentials
field in the ClearBlade IoT Core API. See DeviceCredential for more information.
Because one or more registry-level certificates are present, the Device
resource must meet the device certificate requirements.
The
Device.credentials[i].public_key.key
field must be set to the device public key certificate’s contents (including the header and footer).The
Device.credentials[i].public_key.format
field must be set toRSA_X509_PEM
orES256_X509_PEM
.