The ACME challenge-type used for validation is the ACME Authority Token challenge type,
"tkauth-01", as specified in
RFC 9447. The validation method assumes a trust relationship between a CA and a Token Authority, i.e., that a CA is willing to accept the attestation of a Token Authority for particular types of identifiers as sufficient proof to issue a credential. When using ACME, the OAM system acts as a Token Authority that is trusted by the operator CA/RA. As such, the OAM is trusted to act as the authority for the NF Instance ID namespace within the 5GC.
A new ACME identifier type,
"NfInstanceId", is defined in this clause. A NF uses its NF Instance ID as the value of the
"NfInstanceId". The format of the value of the
"NfInstanceId" is that of the NfInstanceId, as defined in
TS 29.571:
-
NfInstanceId: string: String uniquely identifying a NF instance. The format of the NF Instance ID shall be a Universally Unique Identifier (UUID) version 4, as described in RFC 4122. The hexadecimal letters should be formatted as lower-case characters by the sender, and they shall be handled as case-insensitive by the receiver.
-
Example: "4ace9d34-2c69-4f99-92d5-a73a3fe8e23b"
An example of an ACME order object
"identifiers" field containing a
"NfInstanceId" is as follows:
-
"identifiers": [{"type":"NfInstanceId","value":"4ace9d34-2c69-4f99-92d5-a73a3fe8e23b"}]
In NF certificates, both client and server, the subjectAltName extension contains the NfInstanceId as a
"uniformResourceIdentifier" formatted as a URN as described in
clause 5.3.2 of TS 29.571. For example,
"urn:uuid:4ace9d34-2c69-4f99-92d5-a73a3fe8e23b" is the string representation of the NF Instance ID
"4ace9d34-2c69-4f99-92d5-a73a3fe8e23b" as a URN.
When processing a certificate order containing an identifier of type
"NfInstanceId", a CA uses the Authority Token challenge type of
"tkauth-01" with a
"tkauth-type" of
"atc", as defined in
RFC 9447, to verify that the requesting ACME client has authenticated and authorized control over the requested resources represented by the
"NfInstanceId" value as well as any other NF profile parameters included in the certificate order.
The NF's ACME client responds to the challenge by posting the Authority Token, as received from the OAM system, to the challenge URL identified in the returned ACME authorization object, an example of which follows:
POST /acme/chall/prV_B7yEyA4 HTTP/1.1
Host: boulder.example.com
Content-Type: application/jose+json
{
"protected": base64url({
"alg": "ES256",
"kid": "https://example.com/acme/acct/evOfKhNU60wg",
"nonce": "Q_s3MWoqT05TrdkM2MTDcw",
"url": "https://boulder.example.com/acme/authz/asdf/0"
}),
"payload": base64url({
"tkauth": "DGyRejmCefe7v4N...vb29HhjjLPSggwiE"
}),
"signature": "9cbg5JO1Gf5YLjjz...SpkUfcdPai9uVYYQ"
}
The
"tkauth" field is, as defined in
RFC 9448, a field in the challenge object specific to the tkauth-01 challenge type that contains an Authority Token as defined in the next clause.
A new Authority Token profile, NF Certificate Authority Token, is defined in this clause. The NF Certificate Authority Token is a profile instance of the ACME Authority Token defined in
RFC 9447.
The NF Certificate Authority Token protected header meets the requirements for
"Request Authentication", as specified in
Section 6.2 of RFC 8555.
The NF Certificate Authority Token payload includes the mandatory claims
"exp",
"jti", and
"atc":
-
"exp" claim, defined in Section 4.1.4 of RFC 7519, is included and contains the DateTime value of the date and time that the NF Certificate Authority Token expires.
-
"jti" claim, defined in Section 4.1.7 of RFC 7519, is included and contains a unique identifier for this NF Certificate Authority Token transaction.
-
"atc" claim, defined in RFC 9447, is included and contains a JSON object with the following mandatory elements:
-
"tktype" key with a string value equal to "NfInstanceId" to identify this as a NF Instance ID claim.
-
"tkvalue" key with a string value equal to value of the "NfInstanceId".
-
"fingerprint" key constructed as defined in Section 8.1 of RFC 8555, corresponding to the computation of the "Thumbprint" step using the ACME account key credentials.
Additional elements for additional NF profile parameters can optionally be included, per
RFC 9447 Section 4. These include the following:
-
"nftype" key with a string value equal to an NF Type as defined in RFC 9310,
-
"sans" key with value of an array of identifiers, as defined in clause 6.1.3c, to be included as SANs in addition to the NF Instance ID.
An example of the NF Certificate Authority Token is as follows:
{
"protected": base64url({
"typ":"JWT",
"alg":"ES256",
"x5u":"https://authority.example.org/cert"
}),
"payload": base64url({
"exp":1640995200,
"jti":"id6098364921",
"atc":{"tktype":"NfInstanceId",
"tkvalue":"4ace9d34-2c69-4f99-92d5-a73a3fe8e23b",
"fingerprint":"SHA256 56:3E:CF:AE:83:CA:4D:15:B0:29:FF:1B:71:
D3:BA:B9:19:81:F8:50:9B:DF:4A:D4:39:72:E2:B1:F0:B9:38:E3",
"nftype" : "AMF",
"sans" : ["amf1234.mcc.mnc.3ggp.org"]}
}),
"signature": "9cbg5JO1Gf5YLjjz...SpkUfcdPai9uVYYQ"
}
The Authority Token is acquired by the NF using a RESTful HTTP POST transaction within the NF's authenticated channel to the OAM as follows:
POST /at/account/:id/token HTTP/1.1
Host: authority.example.org
Content-Type: application/json
The request includes the account identifier as a string in the request parameter
"id". This string is managed as an identifier specific to the Token Authority's relationship with an operator CA.
The body of the POST request contains a JSON object with key value pairs corresponding to values that are requested as the content of the claims in the issued token. An example is as follows:
{
"tktype":"NfInstanceId",
"tkvalue":"4ace9d34-2c69-4f99-92d5-a73a3fe8e23b",
"fingerprint":"SHA256 56:3E:CF:AE:83:CA:4D:15:B0:29:FF:1B:71:D3
:BA:B9:19:81:F8:50:9B:DF:4A:D4:39:72:E2:B1:F0:B9:38:E3",
"nftype" : "AMF",
"sans" : ["amf1234.mcc.mnc.3ggp.org"]}
}
If successful, the response to the POST request returns a 200 (OK) with a JSON body that contains, at a minimum, the NF Certificate Authority Token as a JSON object with a key of
"token" and the base64url-encoded string representing the atc token. An example of a successful response is as follows:
HTTP/1.1 200 OK
Content-Type: application/json
{"token": "DGyRejmCefe7v4N...vb29HhjjLPSggwiE"}
If the request is not successful, the response indicates the error condition. Specifically, for the case that the account identifier provided does not exist, the response code 403 (Forbidden) is returned. Other 4xx and 5xx responses follow standard HTTP error condition conventions, as described in
RFC 9110.
When creating the NF Certificate Authority Token, the Token Authority validates that the information contained in the token accurately represents the NF Instance ID and additional NF profile parameters the requesting party is authorized to represent based on their pre-established, verified, and secure relationship. Note that the fingerprint in the token request is not meant to be verified by the Token Authority but rather is meant to be signed as part of the token so that the party that requests the token can, as part of the challenge response, allow the ACME server to validate that the token requested and used came from the same party that controls the ACME client.
Upon receiving a response to the challenge, the operator CA's ACME server performs the following steps to determine the validity of the response.
-
Verify that the value of the "atc" claim is a well-formed JSON object containing the mandatory key values.
-
If there is an "x5u" parameter, verify the "x5u" parameter is an HTTPS URL with a reference to a certificate representing the trusted issuer of Authority Tokens for the ecosystem (i.e., the OAM system), as described in Section 4.1.5 of RFC 7515.
-
If there is an "x5c" parameter, verify the certificate array contains a certificate representing the trusted issuer of Authority Tokens for the ecosystem (i.e., the OAM system), as described in Section 4.1.6 of RFC 7515.
-
Verify the NF Certificate Authority Token signature using the public key of the certificate referenced by the token's "x5u" or "x5c" parameter.
-
Verify that an "atc" claim contains a "tktype" identifier with the value "NfInstanceId", a "tkvalue" identifier with an "NfInstanceId" value matching the identifier specified in the original challenge, a "fingerprint" that is valid and matches the account key of the client making the request, and optional elements corresponding to any addition NF profile parameters included in the certificate order (e.g., NF Type or SAN).
-
Verify that the remaining claims are valid (e.g., verify that token has not expired).
JSON Web Signature (JWS) objects, as defined in
RFC 7515, can include an
"x5u" header parameter to refer to a certificate that is used to validate the JWS signature. The URLs used in
"x5u" are expected to provide the required certificate in response to a GET request, not a POST-as-GET, as required for the
"certificate" URL in the ACME order object. This generally requires the ACME client to download the certificate and host it on a public URL to make it accessible to relying parties.
Section 7 of RFC 9448, defines an optional mechanism for the certification authority (CA) to host the certificate directly and provide a URL that the ACME client owner can directly reference in the
"x5u" of their signed NfInstanceId.
The following is an example of the use of
"x5u" in the response when the certificate status is
"valid".
HTTP/1.1 200 OK
Content-Type: application/json
Replay-Nonce: CGf81JWBsq8QyIgPCi9Q9X
Link: <https://example.com/acme/directory>;rel="index"
Location: https://example.com/acme/order/TOlocE8rfgo
{
"status": "valid",
"expires": "2024-05-20T14:09:07.99Z",
"notBefore": "2024-05-01T00:00:00Z",
"notAfter": "2024-05-08T00:00:00Z",
"identifiers": [
"type":"NfInstanceId",
"value":"4ace9d34-2c69-4f99-92d5-a73a3fe8e23b"
],
"authorizations": ["https://sti-ca.com/acme/authz/1234"],
"finalize": "https://example.com/acme/order/TOlocE8rfgo/finalize",
"certificate": "https://example.com/acme/cert/mAt3xBGaobw",
"x5u": "https://example.com/cert-repo/giJI53km23.pem"
}