Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用pyOpenSSL创建文件CRL和吊销证书?_Python_Openssl_X509_Pyopenssl - Fatal编程技术网

Python 如何使用pyOpenSSL创建文件CRL和吊销证书?

Python 如何使用pyOpenSSL创建文件CRL和吊销证书?,python,openssl,x509,pyopenssl,Python,Openssl,X509,Pyopenssl,我有一个Python脚本,它在目录中查找所有x509自签名证书,对它们进行验证,并将有关它们的信息写入表中(有效日期、过期日期、主题、颁发者)。 是否有任何方法可以使用pyOpenSSL库创建已吊销的.crl证书列表并吊销其中一个证书? 还是只有在终端命令和操作系统库的帮助下才能完成 我在论坛上没有找到这样的问题的答案。回顾你的问题,我注意到你说的是自签名证书。撤销自签名证书通常不起作用。要撤销自签名证书,必须将其包含在由自签名证书本身签名的CRL中。由于撤销证书意味着证书的密钥可能被泄露,因此

我有一个Python脚本,它在目录中查找所有x509自签名证书,对它们进行验证,并将有关它们的信息写入表中(有效日期、过期日期、主题、颁发者)。 是否有任何方法可以使用pyOpenSSL库创建已吊销的.crl证书列表并吊销其中一个证书? 还是只有在终端命令和操作系统库的帮助下才能完成


我在论坛上没有找到这样的问题的答案。

回顾你的问题,我注意到你说的是自签名证书。撤销自签名证书通常不起作用。要撤销自签名证书,必须将其包含在由自签名证书本身签名的CRL中。由于撤销证书意味着证书的密钥可能被泄露,因此拥有该密钥的攻击者可以轻松生成不包含自签名证书的较新CRL。要解决这个问题,您需要一个可信的第三方来发布CRL。然而,这很难实现

我会保持下面的例子,但它不能解决你的问题

--

是的,可以使用pyopenssl创建CRL,您可以看到下面的示例(基于)

但是,pyopenssl的CRL.set_nextUpdate函数有一个值,并且没有设置指定的日期。因此,您必须等待修复才能真正使用它

#-*-编码:拉丁语-1-*-
#
#版权所有(C)AB Strakt
#版权所有(C)Jean-Paul Calderone
#有关详细信息,请参阅许可证。
"""
证书生成模块。
"""
从OpenSSL导入加密
TYPE_RSA=crypto.TYPE_RSA
TYPE_DSA=加密。TYPE_DSA
def createKeyPair(类型,位):
"""
创建公钥/私钥对。
参数:type-Key type,必须是类型_RSA和类型_DSA之一
bits—密钥中要使用的位数
返回:PKey对象中的公钥/私钥对
"""
pkey=crypto.pkey()
pkey.generate_key(类型,位)
返回pkey
def createCertRequest(pkey,digest=“sha256”,**名称):
"""
创建证书请求。
参数:pkey-与请求关联的键
摘要-用于签名的摘要方法,默认为md5
**名称-请求主题的名称,如有可能
论点如下:
C-国家名称
ST-州或省名称
L-位置名称
O-机构名称
OU-组织单位名称
CN-通用名称
电子邮件地址-电子邮件地址
返回:X509Req对象中的证书请求
"""
req=加密。X509Req()
sub=req.get\u subject()
对于name.items()中的(键、值):
setattr(主题、键、值)
要求设置公开密钥(pkey)
请求签名(pkey,摘要)
返回请求
def createCertificate(req、issuerCert、issuerKey、serial、notBefore、notAfter、digest=“sha256”):
"""
根据证书请求生成证书。
参数:req-要使用的证书请求
发卡行证书-发卡行的证书
issuerKey—发行人的私钥
serial—证书的序列号
notBefore-证书运行时的时间戳(相对于现在)
开始生效
notAfter—证书运行时的时间戳(相对于现在)
无效
摘要-用于签名的摘要方法,默认为md5
返回:X509对象中的已签名证书
"""
cert=crypto.X509()
证书设置序列号(序列号)
证书gmtime_adj_notBefore(notBefore)
证书gmtime_adj_notAfter(notAfter)
cert.set\u颁发者(issuerCert.get\u subject())
证书设置主题(请求获取主题())
cert.set_pubkey(请求get_pubkey())
证书签名(发行人密钥,摘要)
返回证书
def createCrl(issuerCert、issuerKey、serial、lastUpdate、nextUpdate、revokedList、digest=“sha256”):
"""
生成证书吊销列表(CRL)。
参数:issuerCert-颁发者的证书
issuerKey—发行人的私钥
序列号-crl的序列号
lastUpdate—上次crl更新的ASN1时间戳(“YYYYMMDDHHMMSSZ”)
nextUpdate—下一次crl更新的ASN1时间戳(“YYYYMMDDHHMMSZ”)
revokedList-已撤销对象的列表。
摘要-用于签名的摘要方法,默认值为sha256
返回:crl对象中已签名的crl
"""
crl=crypto.crl()
crl.set\u lastUpdate(lastUpdate)
crl.set_nextUpdate(nextUpdate)#错误:此行不设置下一次更新
对于撤销列表中的已撤销:
crl.add_已撤销(已撤销)
crl.标志(发卡行、发卡行、摘要)
返回crl
#创建自签名证书
pkey=createKeyPair(RSA类型,2048)
req=createCertRequest(pkey,“sha256”,C=“BR”,CN=“Teste”)
cert=createCertificate(请求,请求,pkey,1,0,60*60*24*365*5,“sha256”)
#创建已撤销的对象
revoked1=加密。已撤销()
撤销1.设置证书序列号(b“1”)#证书序列号
撤销1.设置证书撤销日期(b“20190601010101Z”)#证书撤销日期
revoked1.设置_原因(b'keyConvention')#证书的撤销原因
revoked2=加密。已撤销()
撤销2.设置序列(b“2”)
撤销2.设定修订日期(b“20190601010101Z”)
撤销2.设置原因(无)
#使用已撤销的对象创建CRL
crl=createCrl(证书,pkey,1,b“20190101010101Z”,b“20190101010101Z”,[revoked1,revoked2],b“sha256”)
#将CRL打印为PEM和文本
crl\u pem=crypto.dump\u crl(crypto.FILETYPE\u pem,crl)
打印(crl\U pem)
打印()
crl\u str=crypto.dump\u crl(crypto.FILETYPE\u TEXT,crl)
打印(crl\U str)