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
| Field | Value |
|---|---|
| Cluster ID decimal | 2049 |
| Cluster ID hex | 0x0801 |
| Cluster name | TLS Certificate Management |
| Cluster revision (Matter 1.6.1) | 1 |
| Role | utility |
| Scope | Node |
| PICS code | TLSCERT |
| Typical endpoint | 0 |
Revision history
| Revision | Change |
|---|---|
| 1 | Initial Release |
Shadow Path Format
Cluster 2049 values in the device shadow use this format:
endpoint_id / 2049 / attribute_id
Example:
{
"0/2049/0": 5
}
| Part | Meaning |
|---|---|
0 | Endpoint ID |
2049 | TLS Certificate Management cluster |
0 | MaxRootCertificates attribute |
Data Types
TLSCertStruct (struct) — fabric-scoped
This encodes the mapping between a TLSCAID and the associated root certificate.
| Field | Name | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|
| 0 | CAID | TLSCAID | M | 0 to 65534 | — |
| 1 | Certificate | octstr | O | max length 3000 | This 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.
| Field | Name | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|
| 0 | CCDID | TLSCCDID | M | 0 to 65534 | — |
| 1 | ClientCertificate | octstr (nullable) | O | max length 3000 | This field is an octet string that represents a TLS Client Certificate encoded using DER encoding. |
| 2 | IntermediateCertificates | list of octstr | O | max 10 entries | This 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 …".
| ID | Hex | Attribute | Type | Conformance | Access | Qualities | Default |
|---|---|---|---|---|---|---|---|
| 0 | 0x0000 | MaxRootCertificates | uint8 | M | R (read: view) | — | — |
| 1 | 0x0001 | ProvisionedRootCertificates | list of TLSCertStruct | M | R (read: view, fabric-sensitive) | persisted | — |
| 2 | 0x0002 | MaxClientCertificates | uint8 | M | R (read: view) | — | — |
| 3 | 0x0003 | ProvisionedClientCertificates | list of TLSClientCertificateDetailStruct | M | R (read: view, fabric-sensitive) | persisted | — |
Global attributes
| ID | Hex | Attribute | Meaning |
|---|---|---|---|
| 65528 | 0xFFF8 | GeneratedCommandList | Response command IDs this server generates. |
| 65529 | 0xFFF9 | AcceptedCommandList | Command IDs this server accepts. |
| 65531 | 0xFFFB | AttributeList | Attribute IDs implemented. |
| 65532 | 0xFFFC | FeatureMap | Implemented optional features (see above). |
| 65533 | 0xFFFD | ClusterRevision | Cluster 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.
| Property | Value |
|---|---|
| Type | uint8 |
| Conformance | M |
| Access | R (read: view) |
| Constraint | 5 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.
| Property | Value |
|---|---|
| Type | list of TLSCertStruct |
| Conformance | M |
| Access | R (read: view, fabric-sensitive) |
| Qualities | persisted |
| Constraint | max 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.
| Property | Value |
|---|---|
| Type | uint8 |
| Conformance | M |
| Access | R (read: view) |
| Constraint | 2 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.
| Property | Value |
|---|---|
| Type | list of TLSClientCertificateDetailStruct |
| Conformance | M |
| Access | R (read: view, fabric-sensitive) |
| Qualities | persisted |
| Constraint | max 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.
| ID | Hex | Command | Direction | Conformance | Response | Description |
|---|---|---|---|---|---|---|
| 0 | 0x00 | ProvisionRootCertificate | client → server | M | ProvisionRootCertificateResponse | This command must provision a newly provided certificate, or rotate an existing one, based on the contents of the CAID field. |
| 1 | 0x01 | ProvisionRootCertificateResponse | server → client | M | — | This command is generated in response to a ProvisionRootCertificate command. |
| 2 | 0x02 | FindRootCertificate | client → server | M | FindRootCertificateResponse | 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. |
| 3 | 0x03 | FindRootCertificateResponse | server → client | M | — | This command is generated in response to a FindRootCertificate command. |
| 4 | 0x04 | LookupRootCertificate | client → server | M | LookupRootCertificateResponse | This command returns the CAID for the passed in fingerprint. |
| 5 | 0x05 | LookupRootCertificateResponse | server → client | M | — | This command is generated in response to a LookupRootCertificate command. |
| 6 | 0x06 | RemoveRootCertificate | client → server | M | status | This command is generated to request the server removes the certificate provisioned to the provided Certificate Authority ID. |
| 7 | 0x07 | ClientCSR | client → server | M | ClientCSRResponse | — |
| 8 | 0x08 | ClientCSRResponse | server → client | M | — | — |
| 9 | 0x09 | ProvisionClientCertificate | client → server | M | status | This command is generated to request the Node provisions newly provided Client Certificate Details, or rotate an existing client certificate. |
| 10 | 0x0A | FindClientCertificate | client → server | M | FindClientCertificateResponse | 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 … |
| 11 | 0x0B | FindClientCertificateResponse | server → client | M | — | This command is generated in response to a FindClientCertificate command. |
| 12 | 0x0C | LookupClientCertificate | client → server | M | LookupClientCertificateResponse | This command returns the CCDID for the passed in Fingerprint. |
| 13 | 0x0D | LookupClientCertificateResponse | server → client | M | — | This command is generated in response to a LookupClientCertificate command. |
| 14 | 0x0E | RemoveClientCertificate | client → server | M | status | This 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
| Field | Value |
|---|---|
| Command ID | 0 |
| Command hex | 0x00 |
| Command name | ProvisionRootCertificate |
| Direction | client → server |
| Conformance | M |
| Response | ProvisionRootCertificateResponse |
| Access | (invoke: admin, fabric-scoped) |
Payload Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | Certificate | certificate | octstr | M | max length 3000 | This field is an octet string that represents a certificate encoded using DER encoding. |
| 1 | CAID | caid | TLSCAID (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
| Field | Value |
|---|---|
| Command ID | 1 |
| Command hex | 0x01 |
| Command name | ProvisionRootCertificateResponse |
| Direction | server → client (response) |
| Conformance | M |
Response Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | CAID | caid | TLSCAID | M | 0 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
| Field | Value |
|---|---|
| Command ID | 2 |
| Command hex | 0x02 |
| Command name | FindRootCertificate |
| Direction | client → server |
| Conformance | M |
| Response | FindRootCertificateResponse |
| Access | (invoke: operate, fabric-scoped) |
Payload Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | CAID | caid | TLSCAID (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
| Field | Value |
|---|---|
| Command ID | 3 |
| Command hex | 0x03 |
| Command name | FindRootCertificateResponse |
| Direction | server → client (response) |
| Conformance | M |
Response Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | CertificateDetails | certificateDetails | list of TLSCertStruct | M | 1 to MaxRootCertificates entries | This 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
| Field | Value |
|---|---|
| Command ID | 4 |
| Command hex | 0x04 |
| Command name | LookupRootCertificate |
| Direction | client → server |
| Conformance | M |
| Response | LookupRootCertificateResponse |
| Access | (invoke: operate, fabric-scoped) |
Payload Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | Fingerprint | fingerprint | octstr | M | max length 64 | This 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
| Field | Value |
|---|---|
| Command ID | 5 |
| Command hex | 0x05 |
| Command name | LookupRootCertificateResponse |
| Direction | server → client (response) |
| Conformance | M |
Response Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | CAID | caid | TLSCAID | M | 0 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
| Field | Value |
|---|---|
| Command ID | 6 |
| Command hex | 0x06 |
| Command name | RemoveRootCertificate |
| Direction | client → server |
| Conformance | M |
| Response | status |
| Access | (invoke: admin, fabric-scoped) |
Payload Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | CAID | caid | TLSCAID | M | 0 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
| Field | Value |
|---|---|
| Command ID | 7 |
| Command hex | 0x07 |
| Command name | ClientCSR |
| Direction | client → server |
| Conformance | M |
| Response | ClientCSRResponse |
| Access | (invoke: admin, fabric-scoped) |
Payload Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | Nonce | nonce | octstr | M | allowed: 32 | — |
| 1 | CCDID | ccdid | TLSCCDID (nullable) | M | 0 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
| Field | Value |
|---|---|
| Command ID | 8 |
| Command hex | 0x08 |
| Command name | ClientCSRResponse |
| Direction | server → client (response) |
| Conformance | M |
Response Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | CCDID | ccdid | TLSCCDID | M | 0 to 65534 | — |
| 1 | CSR | csr | octstr | M | max length 3000 | — |
| 2 | NonceSignature | nonceSignature | octstr | M | max 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
| Field | Value |
|---|---|
| Command ID | 9 |
| Command hex | 0x09 |
| Command name | ProvisionClientCertificate |
| Direction | client → server |
| Conformance | M |
| Response | status |
| Access | (invoke: admin, fabric-scoped) |
Payload Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | CCDID | ccdid | TLSCCDID | M | 0 to 65534 | — |
| 1 | ClientCertificate | clientCertificate | octstr | M | max length 3000 | This field is an octet string that represents a TLS Client Certificate encoded using DER encoding. |
| 2 | IntermediateCertificates | intermediateCertificates | list of octstr | M | 0 to 10 entries | This 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
| Field | Value |
|---|---|
| Command ID | 10 |
| Command hex | 0x0A |
| Command name | FindClientCertificate |
| Direction | client → server |
| Conformance | M |
| Response | FindClientCertificateResponse |
| Access | (invoke: operate, fabric-scoped) |
Payload Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | CCDID | ccdid | TLSCCDID (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
| Field | Value |
|---|---|
| Command ID | 11 |
| Command hex | 0x0B |
| Command name | FindClientCertificateResponse |
| Direction | server → client (response) |
| Conformance | M |
Response Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | CertificateDetails | certificateDetails | list of TLSClientCertificateDetailStruct | M | 1 to MaxClientCertificates entries | This 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
| Field | Value |
|---|---|
| Command ID | 12 |
| Command hex | 0x0C |
| Command name | LookupClientCertificate |
| Direction | client → server |
| Conformance | M |
| Response | LookupClientCertificateResponse |
| Access | (invoke: operate, fabric-scoped) |
Payload Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | Fingerprint | fingerprint | octstr | M | max length 64 | This 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
| Field | Value |
|---|---|
| Command ID | 13 |
| Command hex | 0x0D |
| Command name | LookupClientCertificateResponse |
| Direction | server → client (response) |
| Conformance | M |
Response Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | CCDID | ccdid | TLSCCDID | M | 0 to 65534 | — |
Command: RemoveClientCertificate
Purpose
This command is used to request the Node removes all stored information for the provided CCDID.
Command Identity
| Field | Value |
|---|---|
| Command ID | 14 |
| Command hex | 0x0E |
| Command name | RemoveClientCertificate |
| Direction | client → server |
| Conformance | M |
| Response | status |
| Access | (invoke: admin, fabric-scoped) |
Payload Fields
| ID | Field | Payload key | Type | Conformance | Constraint | Meaning |
|---|---|---|---|---|---|---|
| 0 | CCDID | ccdid | TLSCCDID | M | 0 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 asn/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.