scapy.layers.tls.cert

PKI对象的高级方法(X.509证书,CRL,非对称密钥). 同时支持RSA和ECDSA对象.

下面的类是x509.py中定义的ASN.1对象的包装. 通过收集它们的属性,我们绕过了ASN.1结构,因此,没有直接方法可以在序列号被修改后(例如)导出Cert实例的新完整DER编码版本. 如果需要修改导入,只需使用相应的ASN1_Packet.

例如,您可以执行以下操作来修改" cert"的序列,然后使用任何" key"将其签名:

f = open('cert.der')
c = X509_Cert(f.read())
c.tbsCertificate.serialNumber = 0x4B1D
k = PrivKey('key.pem')
new_x509_cert = k.resignCert(c)

不再需要讨厌的openssl调整. :)

class scapy.layers.tls.cert.CRL

Bases: object

来自layer / x509.py的X509_CRL的包装. 使用" x509CRL"属性访问原始对象.

import_from_asn1pkt(crl)
isIssuerCert(other)
show()
verify(anchors)
class scapy.layers.tls.cert.Cert

Bases: object

来自layers / x509.py的X509_Cert包装. 使用" x509Cert"属性访问原始对象.

encrypt(msg, t='pkcs', h='sha256', mgf=None, L=None)
export(filename, fmt='DER')

将证书以" fmt"格式(DER或PEM)导出到文件"文件名"

import_from_asn1pkt(cert)
isIssuerCert(other)
True if ‘other’ issued ‘self’, i.e.:
  • self.issuer == other.subject

  • 自我被他人签名

isRevoked(crl_list)

给定一个受信任的CRL列表(其签名已通过受信任的锚验证),如果证书被其中一个CRL标记为已撤消,则此函数返回True.

请注意,如果证书在先前的CRL中处于保留状态,并且现在在新的CRL中又有效,并且列表中列出了漫游器,则将其视为已吊销:这是因为_all_ CRL被检查(不仅是最新的)和吊销状态不处理.

还请注意,如果在CRL和证书中都提供了对颁发机构密钥标识符执行的对发行者的检查. 否则,将简单比较发行人.

isSelfSigned()
Return True if the certificate is self-signed:
  • 发行人和主题相同

  • 证书的签名有效.

remainingDays(now=None)

根据notAfter字段的值,返回证书仍然有效的天数. 用于比较的日期是当前日期和本地日期,由time.localtime()返回,除非为'now'参数提供了另一个日期. 'now'参数可以以时间元组或表示日期的字符串的形式给出. 字符串版本的可接受格式为:

  • '%b%d%H:%M:%S%Y%Z',例如" 2008年1月30日7:38:59 GMT"

  • '%m /%d /%y',例如'01 / 30/08'(不太精确)

如果证书在所考虑的日期不再有效,那么将返回负值,表示自证书到期以来的天数.

返回的天数是浮点数,以处理不太可能发生的仍然只是有效的证书的情况.

show()
verify(msg, sig, t='pkcs', h='sha256', mgf=None, L=None)
class scapy.layers.tls.cert.Chain(certList, cert0=None)

Bases: list

基本上是增强的Cert数组.

verifyChain(anchors, untrusted=None)

执行该证书的证书链验证. 锚列表是必需的. 可选的不受信任列表中的证书可以用作最终链的附加元素. 与链实例化一样,将仅保留由不可信候选者构建的一条链. 最终,检查日期.

verifyChainFromCAFile(cafile, untrusted_file=None)

Does the same job as .verifyChain() but using the list of anchors from the cafile. As for .verifyChain(), a list of untrusted certificates can be passed (as a file, this time).

verifyChainFromCAPath(capath, untrusted_file=None)

执行与.verifyChainFromCAFile()相同的工作,但使用capath目录中的锚点列表. 该目录应(仅)包含PEM格式的证书文件. 至于.verifyChainFromCAFile(),可以将不可信证书的列表作为文件(PEM格式的证书的串联)传递.

class scapy.layers.tls.cert.PrivKey

Bases: object

PrivKeyRSA和PrivKeyECDSA的父类. 提供常见的signTBSCert()和resignCert()方法.

resignCert(cert)

重写证书或X509_Cert的签名.

signTBSCert(tbsCert, h='sha256')

请注意,这将始终将tbsCertificate中的签名字段复制到结果的signatureAlgorithm字段中,而不管其内容(可能表示ecdsa-with-SHA512)与结果(例如RSA签名MD2)之间的一致性.

下面是计算sigVal的一个小的继承技巧:为了使用对PrivKeyRSA和PrivKeyECDSA都适用的sign()方法,子类的sign()方法接受任何参数,无论是来自RSA还是ECDSA的参数世界,然后他们保留他们感兴趣的对象.在这里,t最终将传递给pkcs1._DecryptAndSignRSA.sign().

verifyCert(cert)

验证证书或X509_Cert.

class scapy.layers.tls.cert.PrivKeyECDSA

Bases: scapy.layers.tls.cert.PrivKey

基于ecdsa库中的SigningKey的ECDSA密钥包装器. 使用"键"属性访问原始对象.

fill_and_store(**kwargs)
import_from_asn1pkt(**kwargs)
sign(**kwargs)
verify(**kwargs)
class scapy.layers.tls.cert.PrivKeyRSA

Bases: scapy.layers.tls.cert.PrivKey, scapy.layers.tls.crypto.pkcs1._EncryptAndVerifyRSA, scapy.layers.tls.crypto.pkcs1._DecryptAndSignRSA

用于基于来自crypto / pkcs1.py的_DecryptAndSignRSA的RSA密钥的包装器.使用'key'属性访问原始对象.

fill_and_store(**kwargs)
import_from_asn1pkt(privkey)
sign(data, t='pkcs', h='sha256', mgf=None, L=None)
verify(msg, sig, t='pkcs', h='sha256', mgf=None, L=None)
class scapy.layers.tls.cert.PubKey

Bases: object

PubKeyRSA和PubKeyECDSA的父类. 提供一个通用的verifyCert()方法.

verifyCert(cert)

验证证书或X509_Cert.

class scapy.layers.tls.cert.PubKeyECDSA

Bases: scapy.layers.tls.cert.PubKey

基于加密库的ECDSA密钥包装器. 使用"键"属性访问原始对象.

encrypt(msg, h='sha256', **kwargs)
fill_and_store(**kwargs)
import_from_der(**kwargs)
verify(**kwargs)
class scapy.layers.tls.cert.PubKeyRSA

Bases: scapy.layers.tls.cert.PubKey, scapy.layers.tls.crypto.pkcs1._EncryptAndVerifyRSA

基于来自crypto / pkcs1.py的_EncryptAndVerifyRSA的RSA密钥包装器.使用'key'属性访问原始对象.

encrypt(msg, t='pkcs', h='sha256', mgf=None, L=None)
fill_and_store(**kwargs)
import_from_asn1pkt(pubkey)
import_from_tuple(**kwargs)
verify(msg, sig, t='pkcs', h='sha256', mgf=None, L=None)
scapy.layers.tls.cert.der2pem(der_string, obj='UNKNOWN')

将DER八位位组字符串转换为PEM格式(带有可选标头)

scapy.layers.tls.cert.pem2der(pem_string)

将PEM字符串转换为DER格式

scapy.layers.tls.cert.split_pem(s)

拆分PEM对象. 处理串联证书很有用.