Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create a self signed X509 certificate in Python

Tags:

python

I followed this url to create a X509 certificate. And the code is:

from OpenSSL import crypto, SSL from socket import gethostname from pprint import pprint from time import gmtime, mktime  CERT_FILE = "selfsigned.crt" KEY_FILE = "private.key"  def create_self_signed_cert():      # create a key pair     k = crypto.PKey()     k.generate_key(crypto.TYPE_<wbr>RSA, 1024)      # create a self-signed cert     cert = crypto.X509()     cert.get_subject().C = "UK"     cert.get_subject().ST = "London"     cert.get_subject().L = "London"     cert.get_subject().O = "Dummy Company Ltd"     cert.get_subject().OU = "Dummy Company Ltd"     cert.get_subject().CN = gethostname()     cert.set_serial_number(1000)     cert.gmtime_adj_notBefore(0)     cert.gmtime_adj_notAfter(10*<wbr>365*24*60*60)     cert.set_issuer(cert.get_<wbr>subject())     cert.set_pubkey(k)     cert.sign(k, 'sha1')      open(CERT_FILE, "wt").write(         crypto.dump_certificate(<wbr>crypto.FILETYPE_PEM, cert))     open(KEY_FILE, "wt").write(         crypto.dump_privatekey(crypto.<wbr>FILETYPE_PEM, k))  create_self_signed_cert() 

But there is something wrong with the code when I run it. Could someone tell me what the meaning of <wbr>? There is a SyntaxError in cert.gmtime_adj_notAfter(10*<wbr>365*24*60*60). Thx.

like image 912
changzhi Avatar asked Nov 26 '14 04:11

changzhi


People also ask

Is x509 a self-signed certificate?

An X. 509 certificate contains an identity and a public key. It binds an identity -- such as an individual or hostname -- to a public key with a digital signature. The signature is either made by a trusted certificate authority (CA) or is self-signed.

How do I create a certificate x509?

Open cmd prompt, change directory to desktop & type command- openssl. It is a process of creating a simple x509 certificate that will be used for digital signatures. Press enter and fill in all the required information like the password for creating keys & a few personal information.


1 Answers

A version which works with python3

from OpenSSL import crypto, SSL  def cert_gen(     emailAddress="emailAddress",     commonName="commonName",     countryName="NT",     localityName="localityName",     stateOrProvinceName="stateOrProvinceName",     organizationName="organizationName",     organizationUnitName="organizationUnitName",     serialNumber=0,     validityStartInSeconds=0,     validityEndInSeconds=10*365*24*60*60,     KEY_FILE = "private.key",     CERT_FILE="selfsigned.crt"):     #can look at generated file using openssl:     #openssl x509 -inform pem -in selfsigned.crt -noout -text     # create a key pair     k = crypto.PKey()     k.generate_key(crypto.TYPE_RSA, 4096)     # create a self-signed cert     cert = crypto.X509()     cert.get_subject().C = countryName     cert.get_subject().ST = stateOrProvinceName     cert.get_subject().L = localityName     cert.get_subject().O = organizationName     cert.get_subject().OU = organizationUnitName     cert.get_subject().CN = commonName     cert.get_subject().emailAddress = emailAddress     cert.set_serial_number(serialNumber)     cert.gmtime_adj_notBefore(0)     cert.gmtime_adj_notAfter(validityEndInSeconds)     cert.set_issuer(cert.get_subject())     cert.set_pubkey(k)     cert.sign(k, 'sha512')     with open(CERT_FILE, "wt") as f:         f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert).decode("utf-8"))     with open(KEY_FILE, "wt") as f:         f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, k).decode("utf-8"))  cert_gen() 
like image 92
acapola Avatar answered Sep 18 '22 09:09

acapola