HandShake Failure在受支持的版本上

时间:2016-09-03 19:17:32

标签: ssl network-protocols scapy tls1.2

我正在尝试确定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()

即使支持此版本,它也会让我握手失败。 除了这个

之外,此代码运行正常

1 个答案:

答案 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
                )
            ])
        ]
    )