Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
# Authors: # Rob Crittenden <rcritten@@redhat.com> # John Dennis <jdennis@redhat.com> # # Copyright (C) 2009 Red Hat # see file 'COPYING' for use and warranty information # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>.
Backend plugin for RA activities.
The `ra` plugin provides access to the CA to issue, retrieve, and revoke certificates via the following methods:
* `ra.check_request_status()` - check certificate request status. * `ra.get_certificate()` - retrieve an existing certificate. * `ra.request_certificate()` - request a new certificate. * `ra.revoke_certificate()` - revoke a certificate. * `ra.take_certificate_off_hold()` - take a certificate off hold. """
# In this case, abort loading this plugin module... raise SkipPluginModule(reason='selfsign is not selected as RA plugin, it is %s' % api.env.ra_plugin)
""" Request Authority backend plugin. """
""" :param csr: The certificate signing request. :param request_type: The request type (defaults to ``'pkcs10'``).
Submit certificate signing request.
The command returns a dict with these possible key/value pairs. Some key/value pairs may be absent.
+---------------+---------------+---------------+ |result name |result type |comments | +===============+===============+===============+ |serial_number |unicode [1]_ | | +---------------+---------------+---------------+ |certificate |unicode [2]_ | | +---------------+---------------+---------------+ |request_id |unicode | | +---------------+---------------+---------------+ |subject |unicode | | +---------------+---------------+---------------+
.. [1] Passed through XMLRPC as decimal string. Can convert to optimal integer type (int or long) via int(serial_number)
.. [2] Base64 encoded
""" # python-nss normalizes the request subject
raise errors.CertificateOperationError(error=_('Request subject "%(request_subject)s" does not match the form "%(subject_base)s"') % \ {'request_subject' : request_subject, 'subject_base' : subject_base}) except errors.CertificateOperationError, e: raise e except NSPRError, e: raise errors.CertificateOperationError(error=_('unable to decode csr: %s') % e)
# certutil wants the CSR to have have a header and footer. Add one # if it isn't there. s = csr.find('-----BEGIN CERTIFICATE REQUEST-----') if s == -1: csr = '-----BEGIN NEW CERTIFICATE REQUEST-----\n' + csr + \ '\n-----END NEW CERTIFICATE REQUEST-----\n'
except Exception, e: try: os.remove(csr_name) except: pass self.log.error('unable to create temporary csr file: %s' % e) raise errors.CertificateOperationError(error=_('file operation'))
except Exception, e: try: os.remove(csr_name) except: pass try: os.remove(cert_name) except: pass self.log.error('unable to create temporary certificate file: %s' % e) raise errors.CertificateOperationError(error=_('file operation'))
except Exception, e: try: os.remove(csr_name) except: pass try: os.remove(cert_name) except: pass self.log.error('next_serial() failed: %s' % e) raise errors.CertificateOperationError(error=_('cannot obtain next serial number'))
"/usr/bin/certutil", "-C", "-d", self.sec_dir, "-c", get_ca_nickname(api.env.realm), "-i", csr_name, "-o", cert_name, "-m", str(serialno), "-v", "60", "-1", "-5", "-6", "-a", "-f", self.pwd_file] stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) try: os.remove(cert_name) except: pass self.log.error('certutil failed: %s' % stderr) raise errors.CertificateOperationError(error=_('certutil failure')) finally: except: pass
finally: except: pass
serial = x509.get_serial_number(cert)
# To make it look like dogtag return just the base64 data. cert = cert.replace('\n','') cert = cert.replace('\r','') s = cert.find('-----BEGIN CERTIFICATE-----') e = cert.find('-----END CERTIFICATE-----') s = s + 27 cert = cert[s:e]
cmd_result = {} cmd_result['serial_number'] = unicode(serial) # convert long to decimal unicode string cmd_result['serial_number_hex'] = u'0x%X' % serial cmd_result['certificate'] = unicode(cert) cmd_result['subject'] = unicode(subject)
return cmd_result
|