Skip to content

Commit 1f730a3

Browse files
committed
feat: support provisioning server cert
Signed-off-by: Maximilian Deubel <[email protected]>
1 parent 88d12c0 commit 1f730a3

File tree

2 files changed

+26
-14
lines changed

2 files changed

+26
-14
lines changed

src/nrfcloud_utils/claim_and_provision_device.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,6 @@ def parse_args(in_args):
7777
parser.add_argument("--csr-attr", type=str,
7878
help="CSR attributes. Do not include CN (common name), the device ID will be used",
7979
default="")
80-
parser.add_argument("--install-ca",
81-
help="Install the AWS root CA cert",
82-
action='store_true', default=False)
8380
parser.add_argument("--coap",
8481
help="Install the CoAP server root CA cert in addition to the AWS root CA cert",
8582
action='store_true', default=False)
@@ -333,10 +330,6 @@ def main(in_args):
333330
if not retval:
334331
error_exit(ser, 'Unable to communicate')
335332

336-
# write CA cert(s) to modem
337-
if args.install_ca or args.coap:
338-
install_ca_certs(args.sectag, args.stage, args.coap, args.noshell)
339-
340333
attest_tok = args.attest
341334
if not attest_tok:
342335
# get attestation token
@@ -474,9 +467,15 @@ def main(in_args):
474467
if not prov_id:
475468
error_exit(ser, 'Failed to obtain provisioning cmd ID')
476469

477-
# TODO: create provisioning command to install AWS root CA?
478-
# currently, provisioning client does not support large CAs,
479-
# such as the AWS root CA.
470+
# create provisioning command to install server cert
471+
print(local_style('\nCreating provisioning command (server cert)...'))
472+
server_cert = ca_certs.get_ca_certs(args.coap, args.stage)
473+
api_res = nrf_cloud_diap.create_provisioning_cmd_server_cert(args.api_key, dev_uuid,
474+
server_cert,
475+
sec_tag=args.sectag)
476+
nrf_cloud_diap.print_api_result("Prov cmd client cert response", api_res, args.verbose)
477+
if api_res.status_code != 201:
478+
error_exit(ser, 'CreateDeviceProvisioningCommand API call failed')
480479

481480
# create provisioning finished command
482481
print(local_style('\nCreating provisioning command (finished)...'))

src/nrfcloud_utils/nrf_cloud_diap.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,8 @@ def get_create_prov_cmd_req(dev_uuid):
7070
global api_url
7171
return f'{api_url}{CLAIMED_DEV}/{dev_uuid}/{PROV}'
7272

73-
def create_provisioning_cmd_client_cert(api_key, dev_uuid, cert_pem,
74-
description='Update client cert',
75-
sec_tag=16842753):
73+
def create_provisioning_cmd_cert(api_key, dev_uuid, cert_pem, description, cert_type,
74+
sec_tag=16842753):
7675
global api_url
7776

7877
payload = {}
@@ -84,13 +83,27 @@ def create_provisioning_cmd_client_cert(api_key, dev_uuid, cert_pem,
8483
cert_obj['content'] = cert_pem
8584
cert_obj['secTag'] = sec_tag
8685

87-
request['clientCertificate'] = cert_obj
86+
request[cert_type] = cert_obj
8887

8988
payload['description'] = description
9089
payload['request'] = request
9190

9291
return requests.post(req, json=payload, headers=get_auth_header(api_key))
9392

93+
def create_provisioning_cmd_client_cert(api_key, dev_uuid, cert_pem,
94+
description='Update client cert',
95+
sec_tag=16842753):
96+
return create_provisioning_cmd_cert(api_key, dev_uuid, cert_pem,
97+
description, 'clientCertificate',
98+
sec_tag)
99+
100+
def create_provisioning_cmd_server_cert(api_key, dev_uuid, cert_pem,
101+
description='Update server cert',
102+
sec_tag=16842753):
103+
return create_provisioning_cmd_cert(api_key, dev_uuid, cert_pem,
104+
description, 'serverCertificate',
105+
sec_tag)
106+
94107
def create_provisioning_cmd_finished(api_key, dev_uuid, description='Provisioning complete'):
95108
global api_url
96109

0 commit comments

Comments
 (0)