code: def createClientCertificate(self, name, noPass = True, keyLength = 2048, days = 375):
          
          if not name:
              raise ValueError('Require name')
          configPath, keyPath, csrPath, certPath = \
                  os.path.join(self.basePath, self.FILE_CONFIG), \
                  os.path.join(self.basePath, self.DIR_PRIVATE, '%s.key.pem' % name), \
                  os.path.join(self.basePath, self.DIR_CSR, '%s.csr.pem' % name), \
                  os.path.join(self.basePath, self.DIR_CERTS, '%s.cert.pem' % name)
          if os.path.isfile(keyPath):
              raise ValueError('Key file exists at [%s]' % keyPath)
          if os.path.isfile(csrPath):
              raise ValueError('CSR file exists at [%s]' % csrPath)
          if os.path.isfile(certPath):
              raise ValueError('Certificate file exists at [%s]' % certPath)
          # Generate the key
          if subprocess.call([ 'openssl', 'genrsa', '-aes256', '-out', keyPath, str(keyLength) ] if not noPass else [ 'openssl', 'genrsa', '-out', keyPath, str(keyLength) ]) != 0:
              raise ValueError('Failed to create key')
          # Generate the csr
          if subprocess.call([ 'openssl', 'req', '-config', configPath, '-key', keyPath, '-new', '-sha256', '-out', csrPath ]) != 0:
              raise ValueError('Failed to create CSR')
          # Generate the certificate
          if subprocess.call([ 'openssl', 'ca', '-config', configPath, '-extensions', 'usr_cert', '-days', str(days), '-notext', '-md', 'sha256', '-in', csrPath, '-out', certPath ]) != 0:
              raise ValueError('Failed to create certificate')
docs: Create a client certificate