从SSLSocket从何处获取签名算法的名称?

2024-04-20 10:18:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我找不到合适的方法来获取SSLSocket接收的证书所使用的签名算法的名称。我知道您可以使用SSLSocket.getpeercert(True)来提取对等证书的字节,但是我不知道如何处理它。PyOpenSSL似乎没有一个简单的接口来从它的字节内容加载X509。在

我想知道这个信息,因为SHA1的证书在2017年1月1日之后不允许有过期时间,而且Python的SSLSocket.do_handshake()实现没有检查这一点。在


Tags: 方法名称算法信息true内容字节时间
1条回答
网友
1楼 · 发布于 2024-04-20 10:18:26

在这条非常有帮助的注释之后,您可以使用cryptography模块来加载SSLSocket.getpeercert()函数输出的derx509格式。从这个Certificate实例,您还可以访问有关证书的许多其他字段,例如过期时间。我现在的做法是:

import cryptography.x509
import cryptography.hazmat.backends.openssl
import ssl
sock = ssl.SSLSocket()

# Wrap a socket, connect, handshake, etc etc...

cert = cryptography.x509.load_der_x509_certificate(
    sock.getpeercert(True),
    cryptography.hazmat.backends.openssl.backend
)
print(cert.signature_hash_algorithm.name) # This prints "sha1".

相关问题 更多 >