ssl.SSLError:[SSL:SSLV3_ALERT_BAD_RECORD_MAC] sslv3警报错误记录mac

问题描述 投票:1回答:1

我正在尝试编写此代码,该代码将从设备中提取证书并解析出来。此代码适用于某些设备,但适用于其他设备,但出现此错误

PS C:\NetDevOps> & "C:/Program Files (x86)/Python38-32/python.exe" c:/NetDevOps/Cert/test6a.py
Traceback (most recent call last):
  File "c:/NetDevOps/Cert/test6a.py", line 17, in <module>
    pull = ssl.get_server_certificate((phoneip, 443))
  File "C:\Program Files (x86)\Python38-32\lib\ssl.py", line 1484, in get_server_certificate
    with context.wrap_socket(sock) as sslsock:
  File "C:\Program Files (x86)\Python38-32\lib\ssl.py", line 500, in wrap_socket
    return self.sslsocket_class._create(
  File "C:\Program Files (x86)\Python38-32\lib\ssl.py", line 1040, in _create
    self.do_handshake()
  File "C:\Program Files (x86)\Python38-32\lib\ssl.py", line 1309, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: SSLV3_ALERT_BAD_RECORD_MAC] sslv3 alert bad record mac (_ssl.c:1108)

这是我的代码:

import ssl
import OpenSSL.crypto

phonelist = ["10.129.157.30"]

for phoneip in phonelist:
    pull = ssl.get_server_certificate((phoneip, 443))
    x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, pull)

output = open(str('C:/NetDevOps/Cert/certs.txt'), 'a+')
output.write(str(phoneip) + ' Certificate' + '\n')
output.write('Issuer: ' + str(x509.get_issuer()) + '\n')
output.write('Serial Number (cert): ' + str(x509.get_serial_number()) + '\n')
output.write('Subject: ' + str(x509.get_subject()) + '\n')
output.write('Not Valid Before: ' + str(x509.get_notBefore()) + '\n')
output.write('Not Valid After: ' + str(x509.get_notAfter()) + '\n')
output.write('\n')

我已经阅读了很多关于与证书验证失败相关的类似文章,但是上面的代码使用的方法被描述为解决该问题的方法。本质上是使用ssl.get_server_certificate来提取证书,然后通过OpenSSL.crypto.load_certificate解析pem,但是即使代码确实可以在某些设备上运行,也不能给失败的设备带来好运。

有什么想法吗?

python ssl openssl cryptography x509
1个回答
0
投票
... sslv3 alert bad record mac ...   

...我已经阅读了很多关于与证书验证失败相关的类似文章,但是上面的代码使用的方法被描述为解决该问题的方法。

您看到的错误与证书验证无关,因此,此区域中的解决方法在这里不起作用。服务器很可能一开始无法正确说出TLS,或者太破损而无法处理现代TLS。一些较旧的和/或嵌入式系统存在这些问题。

如果知道这种损坏的系统是以哪种方式损坏的,则有可能解决它。如果您设法使用浏览器连接到设备,则可以查看TLS握手中的差异并尝试适应Python连接的方式。如果连浏览器都无法连接,您很可能会迷路。

© www.soinside.com 2019 - 2024. All rights reserved.