summaryrefslogtreecommitdiffstats
path: root/base/server/python/pki/server
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2016-08-20 10:47:15 +0200
committerEndi S. Dewata <edewata@redhat.com>2016-08-22 21:39:02 +0200
commiteb28cf05cfad246383dbda054c8cd477bc7acc73 (patch)
tree388cd3c0f1dce9559948fd73f19de06bd931970f /base/server/python/pki/server
parentbde2cd1d3e65850c82a6ea7a6cebcae46a4408f2 (diff)
downloadpki-eb28cf05cfad246383dbda054c8cd477bc7acc73.tar.gz
pki-eb28cf05cfad246383dbda054c8cd477bc7acc73.tar.xz
pki-eb28cf05cfad246383dbda054c8cd477bc7acc73.zip
Updated pki-server subsystem-cert-update CLI.
The pki-server subsystem-cert-update CLI has been updated to use certutil to retrieve the certificate data from the proper token. It will also show a warning if the certificate request cannot be found. The NSSDatabase constructor has been modified to normalize the name of internal NSS token to None. If the token name is None, the certutil will be executed without the -h option. The NSSDatabase.get_cert() has been modified to prepend the token name to the certificate nickname. https://fedorahosted.org/pki/ticket/2440
Diffstat (limited to 'base/server/python/pki/server')
-rw-r--r--base/server/python/pki/server/cli/subsystem.py49
1 files changed, 29 insertions, 20 deletions
diff --git a/base/server/python/pki/server/cli/subsystem.py b/base/server/python/pki/server/cli/subsystem.py
index c173ea255..42da26e10 100644
--- a/base/server/python/pki/server/cli/subsystem.py
+++ b/base/server/python/pki/server/cli/subsystem.py
@@ -21,10 +21,8 @@
from __future__ import absolute_import
from __future__ import print_function
-import base64
import getopt
import getpass
-import nss.nss as nss
import os
import string
import subprocess
@@ -778,36 +776,47 @@ class SubsystemCertUpdateCLI(pki.cli.CLI):
sys.exit(1)
subsystem_cert = subsystem.get_subsystem_cert(cert_id)
- # get cert data from NSS database
- nss.nss_init(instance.nssdb_dir)
- nss_cert = nss.find_cert_from_nickname(subsystem_cert['nickname'])
- data = base64.b64encode(nss_cert.der_data)
- del nss_cert
- nss.nss_shutdown()
+ if self.verbose:
+ print('Retrieving certificate %s from %s' %
+ (subsystem_cert['nickname'], subsystem_cert['token']))
+
+ token = subsystem_cert['token']
+ nssdb = instance.open_nssdb(token)
+ data = nssdb.get_cert(
+ nickname=subsystem_cert['nickname'],
+ output_format='base64')
subsystem_cert['data'] = data
# format cert data for LDAP database
lines = [data[i:i + 64] for i in range(0, len(data), 64)]
data = string.join(lines, '\r\n') + '\r\n'
- # get cert request from local CA
+ if self.verbose:
+ print('Retrieving certificate request from CA database')
+
# TODO: add support for remote CA
ca = instance.get_subsystem('ca')
if not ca:
print('ERROR: No CA subsystem in instance %s.' % instance_name)
sys.exit(1)
+
results = ca.find_cert_requests(cert=data)
- cert_request = results[-1]
- request = cert_request['request']
-
- # format cert request for CS.cfg
- lines = request.splitlines()
- if lines[0] == '-----BEGIN CERTIFICATE REQUEST-----':
- lines = lines[1:]
- if lines[-1] == '-----END CERTIFICATE REQUEST-----':
- lines = lines[:-1]
- request = string.join(lines, '')
- subsystem_cert['request'] = request
+
+ if results:
+ cert_request = results[-1]
+ request = cert_request['request']
+
+ # format cert request for CS.cfg
+ lines = request.splitlines()
+ if lines[0] == '-----BEGIN CERTIFICATE REQUEST-----':
+ lines = lines[1:]
+ if lines[-1] == '-----END CERTIFICATE REQUEST-----':
+ lines = lines[:-1]
+ request = string.join(lines, '')
+ subsystem_cert['request'] = request
+
+ else:
+ print('WARNING: Certificate request not found')
# store cert data and request in CS.cfg
subsystem.update_subsystem_cert(subsystem_cert)