Для создания SSL сертификатов потребуется pyOpenSSL
Далее описан материал создания:
1. Cамоподписанных сертификатов
2. Подписанных сертификатов
Установка:
1. Создание самоподписанных сертификатов
2. Создание подписанных сертификатов
Далее описан материал создания:
1. Cамоподписанных сертификатов
2. Подписанных сертификатов
Установка:
pip install pyopenssl
1. Создание самоподписанных сертификатов
# _*_ coding: utf-8 _*_
import os
from OpenSSL import crypto
KEY_FILE = "app.key"
CERT_FILE = "app.crt"
def create_self_signed_cert(cert_dir):
k = crypto.PKey()
k.generate_key(crypto.TYPE_RSA, 1024) # размер может быть 2048, 4196
# Создание сертификата
cert = crypto.X509()
cert.get_subject().C = "RU" # указываем свои данные
cert.get_subject().ST = "Tatarstan" # указываем свои данные
cert.get_subject().L = "Naberezhnye Chelny" # указываем свои данные
cert.get_subject().O = "xazrad" # указываем свои данные
cert.get_subject().OU = "xazrad" # указываем свои данные
cert.get_subject().CN = "xazrad.blogspot.com" # указываем свои данные
cert.set_serial_number(1000)
cert.gmtime_adj_notBefore(0)
cert.gmtime_adj_notAfter(10*365*24*60*60) # срок "жизни" сертификата
cert.set_issuer(cert.get_subject())
cert.set_pubkey(k)
cert.sign(k, 'sha1')
with open(os.path.join(cert_dir, CERT_FILE), "w") as f:
f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
with open(os.path.join(cert_dir, KEY_FILE), "w") as f:
f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, k))
import os
from OpenSSL import crypto
KEY_FILE = "app.key"
CERT_FILE = "app.crt"
def create_self_signed_cert(cert_dir):
k = crypto.PKey()
k.generate_key(crypto.TYPE_RSA, 1024) # размер может быть 2048, 4196
# Создание сертификата
cert = crypto.X509()
cert.get_subject().C = "RU" # указываем свои данные
cert.get_subject().ST = "Tatarstan" # указываем свои данные
cert.get_subject().L = "Naberezhnye Chelny" # указываем свои данные
cert.get_subject().O = "xazrad" # указываем свои данные
cert.get_subject().OU = "xazrad" # указываем свои данные
cert.get_subject().CN = "xazrad.blogspot.com" # указываем свои данные
cert.set_serial_number(1000)
cert.gmtime_adj_notBefore(0)
cert.gmtime_adj_notAfter(10*365*24*60*60) # срок "жизни" сертификата
cert.set_issuer(cert.get_subject())
cert.set_pubkey(k)
cert.sign(k, 'sha1')
with open(os.path.join(cert_dir, CERT_FILE), "w") as f:
f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
with open(os.path.join(cert_dir, KEY_FILE), "w") as f:
f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, k))
2. Создание подписанных сертификатов
# _*_ coding: utf-8 _*_
import os
from OpenSSL import crypto
KEY_FILE = "app.key"
CERT_FILE = "app.crt"
CA_CRT = "CA_CRT.crt" # сертификат, которым производится подпись
CA_KEY = "CA_KEY.key" # ключ, которым производится подпись
def create_signed_cert(cert_dir):
# Загружаем промежуточный сертификат для подписи
ca_cert = crypto.load_certificate(crypto.FILETYPE_PEM, open(CA_CRT).read())
# Загружаем промежуточный ключ, последний параметр пароль
ca_key = crypto.load_privatekey(crypto.FILETYPE_PEM, open(CA_KEY).read(), "password")
k = crypto.PKey()
k.generate_key(crypto.TYPE_RSA, 1024) # размер может быть 2048, 4196
cert = crypto.X509() cert.get_subject().C = "RU" # указываем свои данные
cert.get_subject().ST = "Tatarstan" # указываем свои данные
cert.get_subject().L = "Naberezhnye Chelny" # указываем свои данные
cert.get_subject().O = "xazrad" # указываем свои данные
cert.get_subject().OU = "xazrad" # указываем свои данные
cert.get_subject().CN = "xazrad.blogspot.com" # указываем свои данные
cert.set_serial_number(1000)
cert.gmtime_adj_notBefore(0)
cert.gmtime_adj_notAfter(10*365*24*60*60) # срок "жизни" сертификата
cert.set_issuer(ca_cert.get_subject())
cert.set_pubkey(k)
cert.sign(ca_key, "sha1")
with open(os.path.join(cert_dir, CERT_FILE), "w") as f:
f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
with open(os.path.join(cert_dir, KEY_FILE), "w") as f:
f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, k))
import os
from OpenSSL import crypto
KEY_FILE = "app.key"
CERT_FILE = "app.crt"
CA_CRT = "CA_CRT.crt" # сертификат, которым производится подпись
CA_KEY = "CA_KEY.key" # ключ, которым производится подпись
def create_signed_cert(cert_dir):
# Загружаем промежуточный сертификат для подписи
ca_cert = crypto.load_certificate(crypto.FILETYPE_PEM, open(CA_CRT).read())
# Загружаем промежуточный ключ, последний параметр пароль
ca_key = crypto.load_privatekey(crypto.FILETYPE_PEM, open(CA_KEY).read(), "password")
k = crypto.PKey()
k.generate_key(crypto.TYPE_RSA, 1024) # размер может быть 2048, 4196
cert = crypto.X509() cert.get_subject().C = "RU" # указываем свои данные
cert.get_subject().ST = "Tatarstan" # указываем свои данные
cert.get_subject().L = "Naberezhnye Chelny" # указываем свои данные
cert.get_subject().O = "xazrad" # указываем свои данные
cert.get_subject().OU = "xazrad" # указываем свои данные
cert.get_subject().CN = "xazrad.blogspot.com" # указываем свои данные
cert.set_serial_number(1000)
cert.gmtime_adj_notBefore(0)
cert.gmtime_adj_notAfter(10*365*24*60*60) # срок "жизни" сертификата
cert.set_issuer(ca_cert.get_subject())
cert.set_pubkey(k)
cert.sign(ca_key, "sha1")
with open(os.path.join(cert_dir, CERT_FILE), "w") as f:
f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
with open(os.path.join(cert_dir, KEY_FILE), "w") as f:
f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, k))
Использование crypto.FILETYPE_ASN1 (вместо crypto.FILETYPE_PEM) возвращает битовое значение сертификатов.