Bridges and fabric administration2049 — TLS Certificate Management

Matter Cluster 2049 — TLS Certificate Management

Matter Cluster 2049 (0x0801) TLS Certificate Management: attributes, commands, events, data types, shadow paths and bridge payload examples.

Matter Cluster 2049 — TLS Certificate Management Cluster

Matter Cluster 2049, also written as 0x0801, is the TLS Certificate Management Cluster. This cluster is used to manage TLS CA Root and Client Certificates on a Node, which are then used by other clusters to provision and manage their usage of TLS. Commands in this cluster uniformly use the Large Message qualifier, even when the command doesn't require it, to reduce the testing matrix. This cluster is present on the root node endpoint when required by a device type, may be present on that endpoint otherwise, and must NOT be present on any other Endpoint of any Node.

Cluster Identity

FieldValue
Cluster ID decimal2049
Cluster ID hex0x0801
Cluster nameTLS Certificate Management
Cluster revision (Matter 1.6.1)1
Roleutility
ScopeNode
PICS codeTLSCERT
Typical endpoint0

Revision history

RevisionChange
1Initial Release

Shadow Path Format

Cluster 2049 values in the device shadow use this format:

endpoint_id / 2049 / attribute_id

Example:

{
  "0/2049/0": 5
}
PartMeaning
0Endpoint ID
2049TLS Certificate Management cluster
0MaxRootCertificates attribute

Data Types

TLSCertStruct (struct) — fabric-scoped

This encodes the mapping between a TLSCAID and the associated root certificate.

FieldNameTypeConformanceConstraintMeaning
0CAIDTLSCAIDM0 to 65534—
1CertificateoctstrOmax length 3000This field is an octet string that represents a certificate encoded using DER encoding.

TLSClientCertificateDetailStruct (struct) — fabric-scoped

This encodes a TLS Client Certificate and corresponding ICAC chain.

FieldNameTypeConformanceConstraintMeaning
0CCDIDTLSCCDIDM0 to 65534—
1ClientCertificateoctstr (nullable)Omax length 3000This field is an octet string that represents a TLS Client Certificate encoded using DER encoding.
2IntermediateCertificateslist of octstrOmax 10 entriesThis field is a list of octet strings representing one or more ICACs (also encoded using DER) that form a Certificate Chain up to, but not including, the TLSRCAC.

Cluster 2049 Attributes

Cluster 2049 defines 4 attributes plus the global attributes. Conformance: M mandatory, O optional, a feature code means "mandatory when that feature is present", square brackets mean "optional when …".

IDHexAttributeTypeConformanceAccessQualitiesDefault
00x0000MaxRootCertificatesuint8MR (read: view)——
10x0001ProvisionedRootCertificateslist of TLSCertStructMR (read: view, fabric-sensitive)persisted—
20x0002MaxClientCertificatesuint8MR (read: view)——
30x0003ProvisionedClientCertificateslist of TLSClientCertificateDetailStructMR (read: view, fabric-sensitive)persisted—

Global attributes

IDHexAttributeMeaning
655280xFFF8GeneratedCommandListResponse command IDs this server generates.
655290xFFF9AcceptedCommandListCommand IDs this server accepts.
655310xFFFBAttributeListAttribute IDs implemented.
655320xFFFCFeatureMapImplemented optional features (see above).
655330xFFFDClusterRevisionCluster revision implemented; 1 for a Matter 1.6.1 device.

Attribute Details

Attribute 0 / 0x0000 — MaxRootCertificates

Path example:

0/2049/0

This attribute contains the maximum number of per fabric TLSRCACs that can be installed on this Node.

PropertyValue
Typeuint8
ConformanceM
AccessR (read: view)
Constraint5 to 254

Example:

{
  "0/2049/0": 5
}

Attribute 1 / 0x0001 — ProvisionedRootCertificates

Path example:

0/2049/1

This attribute is a list of all provisioned TLSCertStruct that are currently installed on this Node. When this attribute is read over a non Large Message capable transport, the Certificate field must NOT be included. To get the full details of a certificate use the FindRootCertificate command.

PropertyValue
Typelist of TLSCertStruct
ConformanceM
AccessR (read: view, fabric-sensitive)
Qualitiespersisted
Constraintmax MaxRootCertificates entries

Each entry is a TLSCertStruct (see Data Types).

Example:

{
  "0/2049/1": []
}

Attribute 2 / 0x0002 — MaxClientCertificates

Path example:

0/2049/2

This attribute contains the maximum number of per fabric Client Certificates that can be installed on this Node.

PropertyValue
Typeuint8
ConformanceM
AccessR (read: view)
Constraint2 to 254

Example:

{
  "0/2049/2": 2
}

Attribute 3 / 0x0003 — ProvisionedClientCertificates

Path example:

0/2049/3

This attribute is a list of all provisioned TLSCCDID that are currently installed on this Node. When this attribute is read over a non Large Message capable transport, the ClientCertificate and IntermediateCertificates fields must NOT be included. To get the full details of a client certificate use the FindClientCertificate command.

PropertyValue
Typelist of TLSClientCertificateDetailStruct
ConformanceM
AccessR (read: view, fabric-sensitive)
Qualitiespersisted
Constraintmax MaxClientCertificates entries

Each entry is a TLSClientCertificateDetailStruct (see Data Types).

Example:

{
  "0/2049/3": []
}

Cluster 2049 Commands

Cluster 2049 has 9 client-to-server commands and 6 responses.

IDHexCommandDirectionConformanceResponseDescription
00x00ProvisionRootCertificateclient → serverMProvisionRootCertificateResponseThis command must provision a newly provided certificate, or rotate an existing one, based on the contents of the CAID field.
10x01ProvisionRootCertificateResponseserver → clientM—This command is generated in response to a ProvisionRootCertificate command.
20x02FindRootCertificateclient → serverMFindRootCertificateResponseThis command returns the specified TLS root certificate, or all provisioned TLS root certificates for the accessing fabric, based on the contents of the CAID field.
30x03FindRootCertificateResponseserver → clientM—This command is generated in response to a FindRootCertificate command.
40x04LookupRootCertificateclient → serverMLookupRootCertificateResponseThis command returns the CAID for the passed in fingerprint.
50x05LookupRootCertificateResponseserver → clientM—This command is generated in response to a LookupRootCertificate command.
60x06RemoveRootCertificateclient → serverMstatusThis command is generated to request the server removes the certificate provisioned to the provided Certificate Authority ID.
70x07ClientCSRclient → serverMClientCSRResponse—
80x08ClientCSRResponseserver → clientM——
90x09ProvisionClientCertificateclient → serverMstatusThis command is generated to request the Node provisions newly provided Client Certificate Details, or rotate an existing client certificate.
100x0AFindClientCertificateclient → serverMFindClientCertificateResponseThis command returns the TLSClientCertificateDetailStruct for the passed in CCDID, or all TLS client certificates for the accessing fabric, based on the contents of the CCDID …
110x0BFindClientCertificateResponseserver → clientM—This command is generated in response to a FindClientCertificate command.
120x0CLookupClientCertificateclient → serverMLookupClientCertificateResponseThis command returns the CCDID for the passed in Fingerprint.
130x0DLookupClientCertificateResponseserver → clientM—This command is generated in response to a LookupClientCertificate command.
140x0ERemoveClientCertificateclient → serverMstatusThis command is used to request the Node removes all stored information for the provided CCDID.

AcceptedCommandList

The AcceptedCommandList attribute lists the command IDs the endpoint actually implements:

endpoint_id / 2049 / 65529
{
  "0/2049/65529": [
    0,
    2,
    4,
    6,
    7,
    9,
    10,
    12,
    14
  ]
}

Before sending a Cluster 2049 command, check that the command ID exists in endpoint/2049/65529. Optional commands are only present when the matching feature is set in FeatureMap.


Bridge Command Payload Format

The bridge accepts Matter commands in this structure:

{
  "message_id": "1",
  "command": "device_command",
  "args": {
    "endpoint_id": 0,
    "cluster_id": 2049,
    "command_name": "ProvisionRootCertificate",
    "payload": {},
    "timed_request_timeout_ms": 1000
  }
}

For Cluster 2049, always use "cluster_id": 2049. Payload keys are the command field names in lowerCamelCase. Octet-string fields are base64-encoded. timed_request_timeout_ms is required for timed commands and ignored otherwise.


Command: ProvisionRootCertificate

Purpose

This command must provision a newly provided certificate, or rotate an existing one, based on the contents of the CAID field.

Command Identity

FieldValue
Command ID0
Command hex0x00
Command nameProvisionRootCertificate
Directionclient → server
ConformanceM
ResponseProvisionRootCertificateResponse
Access(invoke: admin, fabric-scoped)

Payload Fields

IDFieldPayload keyTypeConformanceConstraintMeaning
0CertificatecertificateoctstrMmax length 3000This field is an octet string that represents a certificate encoded using DER encoding.
1CAIDcaidTLSCAID (nullable)M——

Bridge Command Example

{
  "message_id": "1",
  "command": "device_command",
  "args": {
    "endpoint_id": 0,
    "cluster_id": 2049,
    "command_name": "ProvisionRootCertificate",
    "payload": {
      "certificate": "AQID",
      "caid": 0
    }
  }
}

The device answers with ProvisionRootCertificateResponse (see below).


Command: ProvisionRootCertificateResponse

Purpose

This command is generated in response to a ProvisionRootCertificate command.

Command Identity

FieldValue
Command ID1
Command hex0x01
Command nameProvisionRootCertificateResponse
Directionserver → client (response)
ConformanceM

Response Fields

IDFieldPayload keyTypeConformanceConstraintMeaning
0CAIDcaidTLSCAIDM0 to 65534—

Command: FindRootCertificate

Purpose

This command returns the specified TLS root certificate, or all provisioned TLS root certificates for the accessing fabric, based on the contents of the CAID field.

Command Identity

FieldValue
Command ID2
Command hex0x02
Command nameFindRootCertificate
Directionclient → server
ConformanceM
ResponseFindRootCertificateResponse
Access(invoke: operate, fabric-scoped)

Payload Fields

IDFieldPayload keyTypeConformanceConstraintMeaning
0CAIDcaidTLSCAID (nullable)M——

Bridge Command Example

{
  "message_id": "1",
  "command": "device_command",
  "args": {
    "endpoint_id": 0,
    "cluster_id": 2049,
    "command_name": "FindRootCertificate",
    "payload": {
      "caid": 0
    }
  }
}

The device answers with FindRootCertificateResponse (see below).


Command: FindRootCertificateResponse

Purpose

This command is generated in response to a FindRootCertificate command.

Command Identity

FieldValue
Command ID3
Command hex0x03
Command nameFindRootCertificateResponse
Directionserver → client (response)
ConformanceM

Response Fields

IDFieldPayload keyTypeConformanceConstraintMeaning
0CertificateDetailscertificateDetailslist of TLSCertStructM1 to MaxRootCertificates entriesThis field is a list of TLSCertStructs containing a minimum of one TLSCertStruct.

Command: LookupRootCertificate

Purpose

This command returns the CAID for the passed in fingerprint.

Command Identity

FieldValue
Command ID4
Command hex0x04
Command nameLookupRootCertificate
Directionclient → server
ConformanceM
ResponseLookupRootCertificateResponse
Access(invoke: operate, fabric-scoped)

Payload Fields

IDFieldPayload keyTypeConformanceConstraintMeaning
0FingerprintfingerprintoctstrMmax length 64This field is an octet string that represents the certificate fingerprint.

Bridge Command Example

{
  "message_id": "1",
  "command": "device_command",
  "args": {
    "endpoint_id": 0,
    "cluster_id": 2049,
    "command_name": "LookupRootCertificate",
    "payload": {
      "fingerprint": "AQID"
    }
  }
}

The device answers with LookupRootCertificateResponse (see below).


Command: LookupRootCertificateResponse

Purpose

This command is generated in response to a LookupRootCertificate command.

Command Identity

FieldValue
Command ID5
Command hex0x05
Command nameLookupRootCertificateResponse
Directionserver → client (response)
ConformanceM

Response Fields

IDFieldPayload keyTypeConformanceConstraintMeaning
0CAIDcaidTLSCAIDM0 to 65534—

Command: RemoveRootCertificate

Purpose

This command is generated to request the server removes the certificate provisioned to the provided Certificate Authority ID.

Command Identity

FieldValue
Command ID6
Command hex0x06
Command nameRemoveRootCertificate
Directionclient → server
ConformanceM
Responsestatus
Access(invoke: admin, fabric-scoped)

Payload Fields

IDFieldPayload keyTypeConformanceConstraintMeaning
0CAIDcaidTLSCAIDM0 to 65534—

Bridge Command Example

{
  "message_id": "1",
  "command": "device_command",
  "args": {
    "endpoint_id": 0,
    "cluster_id": 2049,
    "command_name": "RemoveRootCertificate",
    "payload": {
      "caid": 0
    }
  }
}

Command: ClientCSR

Purpose

ClientCSR is a client-to-server command of the TLS Certificate Management cluster.

Command Identity

FieldValue
Command ID7
Command hex0x07
Command nameClientCSR
Directionclient → server
ConformanceM
ResponseClientCSRResponse
Access(invoke: admin, fabric-scoped)

Payload Fields

IDFieldPayload keyTypeConformanceConstraintMeaning
0NoncenonceoctstrMallowed: 32—
1CCDIDccdidTLSCCDID (nullable)M0 to 65534—

Bridge Command Example

{
  "message_id": "1",
  "command": "device_command",
  "args": {
    "endpoint_id": 0,
    "cluster_id": 2049,
    "command_name": "ClientCSR",
    "payload": {
      "nonce": "AQID",
      "ccdid": 0
    }
  }
}

The device answers with ClientCSRResponse (see below).


Command: ClientCSRResponse

Purpose

ClientCSRResponse is a server response of the TLS Certificate Management cluster.

Command Identity

FieldValue
Command ID8
Command hex0x08
Command nameClientCSRResponse
Directionserver → client (response)
ConformanceM

Response Fields

IDFieldPayload keyTypeConformanceConstraintMeaning
0CCDIDccdidTLSCCDIDM0 to 65534—
1CSRcsroctstrMmax length 3000—
2NonceSignaturenonceSignatureoctstrMmax length 128—

Command: ProvisionClientCertificate

Purpose

This command is generated to request the Node provisions newly provided Client Certificate Details, or rotate an existing client certificate. This command is typically invoked after having created a new client certificate using the CSR requested in ClientCSR, with the TLSCCDID returned by ClientCSRResponse.

Command Identity

FieldValue
Command ID9
Command hex0x09
Command nameProvisionClientCertificate
Directionclient → server
ConformanceM
Responsestatus
Access(invoke: admin, fabric-scoped)

Payload Fields

IDFieldPayload keyTypeConformanceConstraintMeaning
0CCDIDccdidTLSCCDIDM0 to 65534—
1ClientCertificateclientCertificateoctstrMmax length 3000This field is an octet string that represents a TLS Client Certificate encoded using DER encoding.
2IntermediateCertificatesintermediateCertificateslist of octstrM0 to 10 entriesThis field is a list of octet strings representing one or more ICACs (also encoded using DER) that form a Certificate Chain up to, but not including, the TLSRCAC. An empty value means no intermediate certificates are needed.

Bridge Command Example

{
  "message_id": "1",
  "command": "device_command",
  "args": {
    "endpoint_id": 0,
    "cluster_id": 2049,
    "command_name": "ProvisionClientCertificate",
    "payload": {
      "ccdid": 0,
      "clientCertificate": "AQID",
      "intermediateCertificates": []
    }
  }
}

Command: FindClientCertificate

Purpose

This command returns the TLSClientCertificateDetailStruct for the passed in CCDID, or all TLS client certificates for the accessing fabric, based on the contents of the CCDID field.

Command Identity

FieldValue
Command ID10
Command hex0x0A
Command nameFindClientCertificate
Directionclient → server
ConformanceM
ResponseFindClientCertificateResponse
Access(invoke: operate, fabric-scoped)

Payload Fields

IDFieldPayload keyTypeConformanceConstraintMeaning
0CCDIDccdidTLSCCDID (nullable)M——

Bridge Command Example

{
  "message_id": "1",
  "command": "device_command",
  "args": {
    "endpoint_id": 0,
    "cluster_id": 2049,
    "command_name": "FindClientCertificate",
    "payload": {
      "ccdid": 0
    }
  }
}

The device answers with FindClientCertificateResponse (see below).


Command: FindClientCertificateResponse

Purpose

This command is generated in response to a FindClientCertificate command.

Command Identity

FieldValue
Command ID11
Command hex0x0B
Command nameFindClientCertificateResponse
Directionserver → client (response)
ConformanceM

Response Fields

IDFieldPayload keyTypeConformanceConstraintMeaning
0CertificateDetailscertificateDetailslist of TLSClientCertificateDetailStructM1 to MaxClientCertificates entriesThis field is a list of TLSClientCertificateDetailStruct containing a minimum of one entry.

Command: LookupClientCertificate

Purpose

This command returns the CCDID for the passed in Fingerprint.

Command Identity

FieldValue
Command ID12
Command hex0x0C
Command nameLookupClientCertificate
Directionclient → server
ConformanceM
ResponseLookupClientCertificateResponse
Access(invoke: operate, fabric-scoped)

Payload Fields

IDFieldPayload keyTypeConformanceConstraintMeaning
0FingerprintfingerprintoctstrMmax length 64This field is an octet string that represents the certificate fingerprint.

Bridge Command Example

{
  "message_id": "1",
  "command": "device_command",
  "args": {
    "endpoint_id": 0,
    "cluster_id": 2049,
    "command_name": "LookupClientCertificate",
    "payload": {
      "fingerprint": "AQID"
    }
  }
}

The device answers with LookupClientCertificateResponse (see below).


Command: LookupClientCertificateResponse

Purpose

This command is generated in response to a LookupClientCertificate command.

Command Identity

FieldValue
Command ID13
Command hex0x0D
Command nameLookupClientCertificateResponse
Directionserver → client (response)
ConformanceM

Response Fields

IDFieldPayload keyTypeConformanceConstraintMeaning
0CCDIDccdidTLSCCDIDM0 to 65534—

Command: RemoveClientCertificate

Purpose

This command is used to request the Node removes all stored information for the provided CCDID.

Command Identity

FieldValue
Command ID14
Command hex0x0E
Command nameRemoveClientCertificate
Directionclient → server
ConformanceM
Responsestatus
Access(invoke: admin, fabric-scoped)

Payload Fields

IDFieldPayload keyTypeConformanceConstraintMeaning
0CCDIDccdidTLSCCDIDM0 to 65534—

Bridge Command Example

{
  "message_id": "1",
  "command": "device_command",
  "args": {
    "endpoint_id": 0,
    "cluster_id": 2049,
    "command_name": "RemoveClientCertificate",
    "payload": {
      "ccdid": 0
    }
  }
}

Cluster 2049 Events

Cluster 2049 defines no events.


SmartphoneKey Notes

  • Cluster 2049 is not currently exposed by SmartphoneKey devices. This page documents the Matter 1.6.1 specification so that future devices can be interpreted without changes to the backend.
  • Shadow paths follow endpoint/2049/attribute; attribute values that the device reports as unreadable are written as n/a.
  • Attribute IDs, command IDs and enum values on this page come from the CSA Matter 1.6.1 data model; descriptions are condensed from the specification text.