【问题标题】:Create a self signed X509 certificate in Python在 Python 中创建自签名 X509 证书
【发布时间】:2014-11-26 04:29:31
【问题描述】:

我关注this url 创建了 X509 证书。代码是:

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()

但是当我运行它时代码有问题。谁能告诉我&lt;wbr&gt; 是什么意思?在cert.gmtime_adj_notAfter(10*&lt;wbr&gt;365*24*60*60) 中有一个SyntaxError。谢谢。

【问题讨论】:

  • 指南作者使用 表示您必须自己修改才能使用代码的地方。
  • 你是对的。当我删除 &lt;wbr&gt;.thx 时一切正常
  • &lt;wbr&gt; 是 HTML 标记,表示此处允许分词。我认为最有可能的答案是这是某种意外,不知何故,一些博客软件/CMS/等在此过程中发生了故障,并意外插入了这些&lt;wbr&gt; HTML 标签。我认为这比作者故意将&lt;wbr&gt;(为什么选择那个特定的字符串?)更有可能在代码中这些相当随意的位置来表示什么。

标签: python


【解决方案1】:

适用于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()

【讨论】:

  • 作为第一次让这个工作的人,我还必须运行 pip install pyOpenSSL 以确保我有一个要导入的 OpenSSL 模块。以为我会添加这个,因为所需的 pip 模块名称实际上与您需要在代码中引用的不同
【解决方案2】:

只需删除&lt;wbr&gt;。我太傻了。

【讨论】:

  • 学习新事物时很常见。错误只有放弃才是失败。
  • ...尤达,你是吗?
【解决方案3】:

这是一个非常有用的问题;因为引用的链接现在已经死了;这是搜索“python create ssl certificate”的第一个结果。

不过,我要补充一点,“open(xxx, "wt").write()" 稍后会提出问题。通过不显式关闭文件,您可能会发现当您尝试实际使用该文件时垃圾收集器没有运行 - 导致失败。

最好用:

with open(xxx, "w") as f:
    f.write()

这将确保文件在您完成后关闭。

【讨论】:

    猜你喜欢
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 2013-01-06
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    相关资源
    最近更新 更多