Skip to content

Commit 4a923c5

Browse files
committed
#524 Revocation of NOC root certificates
Enable revoking NOC Root certs Signed-off-by: Abdulbois <abdulbois.tursunov@dsr-corporation.com> Signed-off-by: Abdulbois <abdulbois123@gmail.com>
1 parent 1252be7 commit 4a923c5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+6323
-320
lines changed

docs/static/openapi.yml

+511
Large diffs are not rendered by default.

docs/transactions.md

+50
Original file line numberDiff line numberDiff line change
@@ -1184,6 +1184,30 @@ already present on the ledger.
11841184
- CLI Command:
11851185
- `dcld tx pki add-noc-x509-cert --certificate=<string-or-path> --from=<account>`
11861186

1187+
### REVOKE_NOC_X509_ROOT_CERT
1188+
1189+
**Status: Implemented**
1190+
1191+
This transaction revokes a NOC root certificate owned by the Vendor.
1192+
Revoked NOC root certificates can be re-added using the `ADD_NOC_X509_ROOT_CERTIFICATE` transaction.
1193+
1194+
- Who can send: Vendor account
1195+
- Vid field associated with the corresponding NOC root certificate on the ledger must be equal to the Vendor account's VID.
1196+
- Validation:
1197+
- a NOC Root Certificate with the provided `subject` and `subject_key_id` must exist in the ledger.
1198+
- Parameters:
1199+
- subject: `string` - base64 encoded subject DER sequence bytes of the certificate.
1200+
- subject_key_id: `string` - certificate's `Subject Key Id` in hex string format, e.g., `5A:88:0E:6C:36:53:D0:7F:B0:89:71:A3:F4:73:79:09:30:E6:2B:DB`.
1201+
- serial_number: `optional(string)` - certificate's serial number. If not provided, the transaction will revoke all certificates that match the given `subject` and `subject_key_id` combination.
1202+
- revoke-child: `optional(bool)` - if true, then all certificates in the chain signed by the revoked certificate (intermediate, leaf) are revoked as well. If false, only the current root cert is revoked (default: false).
1203+
- info: `optional(string)` - information/notes for the revocation
1204+
- time: `optional(int64)` - revocation time (number of nanoseconds elapsed since January 1, 1970 UTC). CLI uses the current time for that field.
1205+
- In State:
1206+
- `pki/RevokedCertificates/value/<Certificate's Subject>/<Certificate's Subject Key ID>`
1207+
- `pki/RevokedNOCRootCertificates/value/<Certificate's Subject>/<Certificate's Subject Key ID>`
1208+
- CLI command:
1209+
- `dcld tx pki revoke-noc-x509-root-cert --subject=<base64 string> --subject-key-id=<hex string> --serial-number=<string> --info=<string> --time=<int64> --revoke-child=<bool> --from=<account>`
1210+
11871211
### GET_X509_CERT
11881212

11891213
**Status: Implemented**
@@ -1524,6 +1548,32 @@ Retrieve a list of all of NOC non-root certificates
15241548
- REST API:
15251549
- GET `/dcl/pki/noc-certificates`
15261550

1551+
### GET_ALL_REVOKED_NOC_X509_ROOT_CERTS
1552+
1553+
Gets all revoked NOC root certificates.
1554+
1555+
- Who can send: Any account
1556+
- Parameters:
1557+
- Common pagination parameters
1558+
- CLI command:
1559+
- `dcld query pki all-revoked-noc-x509-root-certs`
1560+
- REST API:
1561+
- GET `/dcl/pki/revoked-noc-root-certificates`
1562+
1563+
### GET_REVOKED_NOC_X509_ROOT_CERT
1564+
1565+
**Status: Implemented**
1566+
1567+
Gets a revoked NOC root certificate by the given subject and subject key ID attributes.
1568+
1569+
- Parameters:
1570+
- subject: `string` - Base64 encoded subject DER sequence bytes of the certificate.
1571+
- subject_key_id: `string` - Certificate's `Subject Key Id` in hex string format, e.g., `5A:88:0E:6C:36:53:D0:7F:B0:89:71:A3:F4:73:79:09:30:E6:2B:DB`.
1572+
- CLI command:
1573+
- `dcld query pki revoked-noc-x509-root-cert --subject=<base64 string> --subject-key-id=<hex string>`
1574+
- REST API:
1575+
- GET `/dcl/pki/revoked-noc-root-certificates/{subject}/{subject_key_id}`
1576+
15271577
## AUTH
15281578

15291579
### PROPOSE_ADD_ACCOUNT

integration_tests/cli/pki-noc-certs.sh

+127-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ noc_root_cert_1_subject_key_id="44:EB:4C:62:6B:25:48:CD:A2:B3:1C:87:41:5A:08:E7:
77
noc_root_cert_1_serial_number="47211865327720222621302679792296833381734533449"
88
noc_root_cert_1_subject_as_text="CN=NOC-1,OU=Testing Division,O=Example Company,L=Tashkent,ST=Some State,C=UZ"
99

10+
noc_root_cert_1_copy_path="integration_tests/constants/noc_root_cert_1_copy"
11+
noc_root_cert_1_copy_serial_number="460647353168152946606945669687905527879095841977"
12+
1013
noc_root_cert_2_path="integration_tests/constants/noc_root_cert_2"
1114
noc_root_cert_2_subject="MHoxCzAJBgNVBAYTAlVaMRMwEQYDVQQIDApTb21lIFN0YXRlMREwDwYDVQQHDAhUYXNoa2VudDEYMBYGA1UECgwPRXhhbXBsZSBDb21wYW55MRkwFwYDVQQLDBBUZXN0aW5nIERpdmlzaW9uMQ4wDAYDVQQDDAVOT0MtMg=="
1215
noc_root_cert_2_subject_key_id="CF:E6:DD:37:2B:4C:B2:B9:A9:F2:75:30:1C:AA:B1:37:1B:11:7F:1B"
@@ -22,13 +25,18 @@ noc_root_cert_3_subject_as_text="CN=NOC-3,O=Internet Widgits Pty Ltd,ST=Some-Sta
2225
noc_cert_1_path="integration_tests/constants/noc_cert_1"
2326
noc_cert_1_subject="MIGCMQswCQYDVQQGEwJVWjETMBEGA1UECAwKU29tZSBTdGF0ZTETMBEGA1UEBwwKU29tZSBTdGF0ZTEYMBYGA1UECgwPRXhhbXBsZSBDb21wYW55MRkwFwYDVQQLDBBUZXN0aW5nIERpdmlzaW9uMRQwEgYDVQQDDAtOT0MtY2hpbGQtMQ=="
2427
noc_cert_1_subject_key_id="02:72:6E:BC:BB:EF:D6:BD:8D:9B:42:AE:D4:3C:C0:55:5F:66:3A:B3"
25-
noc_cert_1_serial_number="674670448117546613288490437900193266085116131998"
28+
noc_cert_1_serial_number="631388393741945881054190991612463928825155142122"
2629

2730
noc_cert_2_path="integration_tests/constants/noc_cert_2"
2831
noc_cert_2_subject="MIGCMQswCQYDVQQGEwJVWjETMBEGA1UECAwKU29tZSBTdGF0ZTETMBEGA1UEBwwKU29tZSBTdGF0ZTEYMBYGA1UECgwPRXhhbXBsZSBDb21wYW55MRkwFwYDVQQLDBBUZXN0aW5nIERpdmlzaW9uMRQwEgYDVQQDDAtOT0MtY2hpbGQtMg=="
2932
noc_cert_2_subject_key_id="87:48:A2:33:12:1F:51:5C:93:E6:90:40:4A:2C:AB:9E:D6:19:E5:AD"
3033
noc_cert_2_serial_number="361372967010167010646904372658654439710639340814"
3134

35+
noc_leaf_cert_1_path="integration_tests/constants/noc_leaf_cert_1"
36+
noc_leaf_cert_1_subject="MIGBMQswCQYDVQQGEwJVWjETMBEGA1UECAwKU29tZSBTdGF0ZTETMBEGA1UEBwwKU29tZSBTdGF0ZTEYMBYGA1UECgwPRXhhbXBsZSBDb21wYW55MRkwFwYDVQQLDBBUZXN0aW5nIERpdmlzaW9uMRMwEQYDVQQDDApOT0MtbGVhZi0x"
37+
noc_leaf_cert_1_subject_key_id="77:1F:DB:C4:4C:B1:29:7E:3C:EB:3E:D8:2A:38:0B:63:06:07:00:01"
38+
noc_leaf_cert_1_serial_number="281347277961838999749763518155363401757954575313"
39+
3240
trustee_account="jack"
3341
second_trustee_account="alice"
3442

@@ -237,4 +245,122 @@ check_response "$result" "\"subjectKeyId\": \"$noc_cert_2_subject_key_id\""
237245
check_response "$result" "\"serialNumber\": \"$noc_cert_2_serial_number\""
238246
echo $result | jq
239247

248+
test_divider
249+
250+
echo "Add third NOC root certificate by vendor with VID = $vid"
251+
result=$(echo "$passphrase" | dcld tx pki add-noc-x509-root-cert --certificate="$noc_root_cert_1_copy_path" --from $vendor_account --yes)
252+
check_response "$result" "\"code\": 0"
253+
254+
echo "Add NOC leaf certificate by vendor with VID = $vid"
255+
result=$(echo "$passphrase" | dcld tx pki add-noc-x509-cert --certificate="$noc_leaf_cert_1_path" --from $vendor_account --yes)
256+
check_response "$result" "\"code\": 0"
257+
258+
echo "Request All NOC root certificate"
259+
result=$(dcld query pki all-noc-x509-root-certs)
260+
echo $result | jq
261+
check_response "$result" "\"serialNumber\": \"$noc_root_cert_1_serial_number\""
262+
check_response "$result" "\"serialNumber\": \"$noc_root_cert_1_copy_serial_number\""
263+
check_response "$result" "\"serialNumber\": \"$noc_root_cert_2_serial_number\""
264+
265+
echo "Request all NOC certificates"
266+
result=$(dcld query pki all-noc-x509-certs)
267+
echo $result | jq
268+
check_response "$result" "\"serialNumber\": \"$noc_cert_1_serial_number\""
269+
check_response "$result" "\"serialNumber\": \"$noc_cert_2_serial_number\""
270+
check_response "$result" "\"serialNumber\": \"$noc_leaf_cert_1_serial_number\""
271+
272+
echo "Try to revoke intermediate with different VID = $vid_2"
273+
result=$(echo "$passphrase" | dcld tx pki revoke-noc-x509-root-cert --subject="$noc_root_cert_1_subject" --subject-key-id="$noc_root_cert_1_subject_key_id" --from $vendor_account_2 --yes)
274+
check_response "$result" "\"code\": 439"
275+
276+
echo "$vendor_account Vendor revokes only root certificate, it should not revoke intermediate certificates"
277+
result=$(echo "$passphrase" | dcld tx pki revoke-noc-x509-root-cert --subject="$noc_root_cert_1_subject" --subject-key-id="$noc_root_cert_1_subject_key_id" --from=$vendor_account --yes)
278+
check_response "$result" "\"code\": 0"
279+
280+
echo "Request all revoked certificates should contain two root certificates only"
281+
result=$(dcld query pki all-revoked-x509-certs)
282+
echo $result | jq
283+
check_response "$result" "\"subject\": \"$noc_root_cert_1_subject"
284+
check_response "$result" "\"subjectKeyId\": \"$noc_root_cert_1_subject_key_id\""
285+
check_response "$result" "\"serialNumber\": \"$noc_root_cert_1_serial_number\""
286+
check_response "$result" "\"serialNumber\": \"$noc_root_cert_1_copy_serial_number\""
287+
response_does_not_contain "$result" "\"subject\": \"$noc_cert_1_subject\""
288+
response_does_not_contain "$result" "\"subject\": \"$noc_leaf_cert_1_subject\""
289+
290+
echo "Request all revoked noc root certificates should contain two root certificates"
291+
result=$(dcld query pki all-revoked-noc-x509-root-certs)
292+
echo $result | jq
293+
check_response "$result" "\"subject\": \"$noc_root_cert_1_subject"
294+
check_response "$result" "\"subjectKeyId\": \"$noc_root_cert_1_subject_key_id\""
295+
check_response "$result" "\"serialNumber\": \"$noc_root_cert_1_serial_number\""
296+
check_response "$result" "\"serialNumber\": \"$noc_root_cert_1_copy_serial_number\""
297+
response_does_not_contain "$result" "\"subject\": \"$noc_cert_1_subject\""
298+
response_does_not_contain "$result" "\"subject\": \"$noc_leaf_cert_1_subject\""
299+
300+
echo "Request revoked noc root certificate by subject and subjectKeyId should contain two root certificates"
301+
result=$(dcld query pki revoked-noc-x509-root-cert --subject="$noc_root_cert_1_subject" --subject-key-id="$noc_root_cert_1_subject_key_id")
302+
echo $result | jq
303+
check_response "$result" "\"subject\": \"$noc_root_cert_1_subject"
304+
check_response "$result" "\"subjectKeyId\": \"$noc_root_cert_1_subject_key_id\""
305+
check_response "$result" "\"serialNumber\": \"$noc_root_cert_1_serial_number\""
306+
check_response "$result" "\"serialNumber\": \"$noc_root_cert_1_copy_serial_number\""
307+
response_does_not_contain "$result" "\"subject\": \"$noc_root_cert_2_subject\""
308+
response_does_not_contain "$result" "\"subject\": \"$noc_root_cert_3_subject\""
309+
310+
echo "Request all x509 root revoked certificates should not contain revoked NOC root certificates"
311+
result=$(dcld query pki all-revoked-x509-root-certs)
312+
response_does_not_contain "$result" "\"subject\": \"$noc_root_cert_1_subject\""
313+
response_does_not_contain "$result" "\"subjectKeyId\": \"$noc_root_cert_1_subject_key_id\""
314+
response_does_not_contain "$result" "\"serialNumber\": \"$noc_root_cert_1_serial_number\""
315+
response_does_not_contain "$result" "\"serialNumber\": \"$noc_root_cert_1_copy_serial_number\""
316+
echo $result | jq
317+
318+
echo "Request NOC certificate by VID must not contain revoked root certificates"
319+
result=$(dcld query pki noc-x509-root-certs --vid="$vid")
320+
check_response "$result" "Not Found"
321+
response_does_not_contain "$result" "\"subject\": \"$noc_root_cert_1_subject\""
322+
response_does_not_contain "$result" "\"subjectKeyId\": \"$noc_root_cert_1_subject_key_id\""
323+
response_does_not_contain "$result" "\"serialNumber\": \"$noc_root_cert_1_serial_number\""
324+
response_does_not_contain "$result" "\"serialNumber\": \"$noc_root_cert_1_copy_serial_number\""
325+
echo $result | jq
326+
327+
echo "Request all certificates by subject must be empty"
328+
result=$(dcld query pki all-subject-x509-certs --subject="$noc_root_cert_1_subject")
329+
response_does_not_contain "$result" "\"subject\": \"$noc_root_cert_1_subject\""
330+
response_does_not_contain "$result" "\"subjectKeyId\": \"$noc_root_cert_1_subject_key_id\""
331+
echo $result | jq
332+
333+
echo "Request all certificates by subjectKeyId must be empty"
334+
result=$(dcld query pki x509-cert --subject-key-id="$noc_root_cert_1_subject_key_id")
335+
check_response "$result" "Not Found"
336+
response_does_not_contain "$result" "\"subject\": \"$noc_root_cert_1_subject\""
337+
response_does_not_contain "$result" "\"subjectKeyId\": \"$noc_root_cert_1_subject_key_id\""
338+
response_does_not_contain "$result" "\"serialNumber\": \"$noc_root_cert_1_serial_number\""
339+
response_does_not_contain "$result" "\"serialNumber\": \"$noc_root_cert_1_copy_serial_number\""
340+
echo $result | jq
341+
342+
echo "Request NOC certificate by VID = $vid should contain intermediate and leaf certificates"
343+
result=$(dcld query pki noc-x509-certs --vid="$vid")
344+
echo $result | jq
345+
check_response "$result" "\"subject\": \"$noc_cert_1_subject\""
346+
check_response "$result" "\"subject\": \"$noc_leaf_cert_1_subject\""
347+
check_response "$result" "\"subjectKeyId\": \"$noc_cert_1_subject_key_id\""
348+
check_response "$result" "\"subjectKeyId\": \"$noc_leaf_cert_1_subject_key_id\""
349+
check_response "$result" "\"serialNumber\": \"$noc_cert_1_serial_number\""
350+
check_response "$result" "\"serialNumber\": \"$noc_leaf_cert_1_serial_number\""
351+
352+
echo "Request all approved certificates should not contain revoked NOC root certificates"
353+
result=$(dcld query pki all-x509-certs)
354+
check_response "$result" "\"subject\": \"$noc_cert_1_subject\""
355+
check_response "$result" "\"subjectKeyId\": \"$noc_cert_1_subject_key_id\""
356+
check_response "$result" "\"serialNumber\": \"$noc_cert_1_serial_number\""
357+
check_response "$result" "\"subject\": \"$noc_leaf_cert_1_subject\""
358+
check_response "$result" "\"subjectKeyId\": \"$noc_leaf_cert_1_subject_key_id\""
359+
check_response "$result" "\"serialNumber\": \"$noc_leaf_cert_1_serial_number\""
360+
response_does_not_contain "$result" "\"subject\": \"$noc_root_cert_1_subject\""
361+
response_does_not_contain "$result" "\"subjectKeyId\": \"$noc_root_cert_1_subject_key_id\""
362+
response_does_not_contain "$result" "\"serialNumber\": \"$noc_root_cert_1_serial_number\""
363+
response_does_not_contain "$result" "\"serialNumber\": \"$noc_root_cert_1_copy_serial_number\""
364+
echo $result | jq
365+
240366
test_divider

0 commit comments

Comments
 (0)