从哪里获取 SSLSocket 的签名算法名称?
Where to get name of signature algorithm from SSLSocket?
我找不到合适的方法来获取用于 SSLSocket 接收的证书的签名算法的名称。我知道您可以使用 SSLSocket.getpeercert(True)
提取对等证书的字节,但我不知道如何处理它。 PyOpenSSL 似乎没有一个简单的接口来从它的字节内容加载 X509。
我想知道此信息,因为带有 SHA1 的证书不允许在 2017 年 1 月 1 日之后过期,并且 Python 的 SSLSocket.do_handshake()
实施不会对此进行检查。
在为我指明正确方向的非常有帮助的评论之后,您可以使用 cryptography
模块加载 SSLSocket.getpeercert()
函数输出的 DER X509 格式。从这个 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".
我找不到合适的方法来获取用于 SSLSocket 接收的证书的签名算法的名称。我知道您可以使用 SSLSocket.getpeercert(True)
提取对等证书的字节,但我不知道如何处理它。 PyOpenSSL 似乎没有一个简单的接口来从它的字节内容加载 X509。
我想知道此信息,因为带有 SHA1 的证书不允许在 2017 年 1 月 1 日之后过期,并且 Python 的 SSLSocket.do_handshake()
实施不会对此进行检查。
在为我指明正确方向的非常有帮助的评论之后,您可以使用 cryptography
模块加载 SSLSocket.getpeercert()
函数输出的 DER X509 格式。从这个 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".