Skip to content

Commit 1d72d91

Browse files
timofey-barminsafianalicb
authored andcommitted
MB-52182 Add --set-client-certificate
Reload internal client certificate (behaviour is similar to node certificate): couchbase-cli ssl-manage -c 127.0.0.1:9000 \ -u Administrator \ --set-client-certificate \ --pkey-passphrase-settings ./settings.json Change-Id: Ia07ebdb66de945d64b9e80acf6b504121716cc8b Reviewed-on: https://review.couchbase.org/c/couchbase-cli/+/225210 Reviewed-by: Lubomir Marinski <lubo.marinski@couchbase.com> Tested-by: Build Bot <build@couchbase.com> Reviewed-by: Safian Ali <safian.ali@couchbase.com>
1 parent 7212057 commit 1d72d91

4 files changed

Lines changed: 26 additions & 3 deletions

File tree

cbmgr.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4262,6 +4262,8 @@ def __init__(self):
42624262
help="Regenerate the cluster certificate and save it to a file")
42634263
me_group.add_argument("--set-node-certificate", dest="set_cert", action="store_true",
42644264
default=False, help="Sets the node certificate")
4265+
me_group.add_argument("--set-client-certificate", dest="set_client_cert", action="store_true",
4266+
default=False, help="Sets the internal client certificate")
42654267
group.add_argument("--pkey-passphrase-settings", dest="pkey_settings", metavar="<path>",
42664268
help="Optional path to a JSON file containing private key passphrase settings")
42674269
me_group.add_argument("--set-client-auth", dest="client_auth_path", metavar="<path>",
@@ -4365,9 +4367,13 @@ def val_or_unknown(ca, key):
43654367
_exit_if_errors(errors)
43664368
_success(f'Uploaded cluster certificate to {opts.cluster}')
43674369
elif opts.set_cert:
4368-
_, errors = self.rest.set_node_certificate(_read_json_file_if_provided(opts.pkey_settings))
4370+
_, errors = self.rest.set_certificate(_read_json_file_if_provided(opts.pkey_settings), is_client_cert=False)
43694371
_exit_if_errors(errors)
43704372
_success("Node certificate set")
4373+
elif opts.set_client_cert:
4374+
_, errors = self.rest.set_certificate(_read_json_file_if_provided(opts.pkey_settings), is_client_cert=True)
4375+
_exit_if_errors(errors)
4376+
_success("Internal client certificate set")
43714377
elif opts.client_auth_path:
43724378
data = _exit_on_file_read_failure(opts.client_auth_path)
43734379
try:

cluster_manager.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2000,7 +2000,7 @@ def retrieve_node_certificate(self, node):
20002000
url = f'{self.hostname}/pools/default/certificate/node/{node}'
20012001
return self._get(url)
20022002

2003-
def set_node_certificate(self, pkey_settings):
2003+
def set_certificate(self, pkey_settings, is_client_cert=False):
20042004
"""Activates the current node certificate
20052005
20062006
Grabs chain.pem and pkey.pem from the <data folder>/inbox/ directory and
@@ -2014,7 +2014,12 @@ def set_node_certificate(self, pkey_settings):
20142014
if pkey_settings:
20152015
params["privateKeyPassphrase"] = pkey_settings
20162016

2017-
return self._post_json(f'{self.hostname}/node/controller/reloadCertificate', params)
2017+
if is_client_cert:
2018+
endpoint = '/node/controller/reloadClientCertificate'
2019+
else:
2020+
endpoint = '/node/controller/reloadCertificate'
2021+
2022+
return self._post_json(f'{self.hostname}{endpoint}', params)
20182023

20192024
def set_client_cert_auth(self, config):
20202025
"""Enable/disable the client cert auth"""

test/mock_server.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,7 @@ def export_eventing_functions(rest_params=None, server_args=None, path="", endpo
570570
(r'/node/controller/disableUnusedExternalListeners', {'POST': do_nothing}),
571571
(r'/node/controller/loadTrustedCAs', {'POST': do_nothing}),
572572
(r'/node/controller/reloadCertificate', {'POST': do_nothing}),
573+
(r'/node/controller/reloadClientCertificate', {'POST': do_nothing}),
573574
(r'/node/controller/setupNetConfig', {'POST': do_nothing}),
574575
(r'/controller/addNode$', {'POST': do_nothing}),
575576
(r'/controller/failOver$', {'POST': do_nothing}),

test/test_cli.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2321,6 +2321,17 @@ def test_set_node_certificate_not_init(self):
23212321
self.assertIn('POST:/node/controller/reloadCertificate', self.server.trace)
23222322
self.assertIn('Node certificate set', self.str_output)
23232323

2324+
def test_set_client_certificate(self):
2325+
self.no_error_run(self.command + ['--set-client-certificate'], self.server_args)
2326+
self.assertIn('POST:/node/controller/reloadClientCertificate', self.server.trace)
2327+
self.assertIn('Internal client certificate set', self.str_output)
2328+
2329+
def test_set_client_certificate_not_init(self):
2330+
self.server_args['init'] = False
2331+
self.no_error_run(self.command + ['--set-client-certificate'], self.server_args)
2332+
self.assertIn('POST:/node/controller/reloadClientCertificate', self.server.trace)
2333+
self.assertIn('Internal client certificate set', self.str_output)
2334+
23242335
def test_set_node_certificate_with_pkey_settings(self):
23252336
pkey_settings_file = tempfile.NamedTemporaryFile(delete=False)
23262337
pkey_settings_file.write(b'{"type":"plain","password":"asdf"}')

0 commit comments

Comments
 (0)