我正在尝试确定TLS_1_2是否是网站上支持的版本,即(portal.threatpulse.com,443)
from scapy_ssl_tls.ssl_tls import *
target = (portal.threatpulse.com,443)
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect(target)
pkt = TLSRecord(version = 'TLS_1_2')/TLSHandshake()
/TLSClientHello(version = 'TLS_1_2')
sock.sendall(str(pkt))
resp_pkt = sock.recv(8192)
resp = SSL(resp_pkt)
resp.show()
即使支持此版本,它也会让我握手失败。 除了这个
之外,此代码运行正常答案 0 :(得分:1)
由于今天的证书通常具有SHA-256签名,因此服务器要求客户端支持RSA / SHA-256作为签名/哈希算法。但是这个组合不包含在SignatureAndHashAlgorithm
TLS扩展的默认集合中,这是TLS 1.2的新增功能。此默认集仅包括(带有RSA,DSA或ECDSA的SHA-1。如果TLS 1.2客户端支持的算法比默认值更多或不同,则需要包含SignatureAndHashAlgorithm
扩展名并明确声明对此签名/哈希的支持使用以下代码,此特定网站适用于我,但对于其他网站,您可能需要将其扩展为包括ECDSA。
pkt = TLSRecord(version = 'TLS_1_2') / \
TLSHandshake() / \
TLSClientHello(
version = 'TLS_1_2',
extensions=[ TLSExtension() / \
TLSExtSignatureAndHashAlgorithm( algorithms = [
TLSSignatureHashAlgorithm(
hash_algorithm = TLSHashAlgorithm.SHA256,
signature_algorithm = TLSSignatureAlgorithm.RSA
)
])
]
)