ssl.SSLError: [SSL: SSLV3_ALERT_BAD_RECORD_MAC] sslv3 предупреждение о плохой записи Mac - PullRequest
1 голос
/ 30 апреля 2020

То, что я пытаюсь сделать, это написать этот код, который будет извлекать сертификат с устройства и анализировать его. Этот код работает против некоторых устройств, но против других я получаю эту ошибку

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')

Я прочитал кучу SO статей о подобных для проверки сертификата не удается, однако приведенный выше код использует метод, описанный в качестве исправления этой проблемы. По сути, получение сертификата с использованием ssl.get_server_certificate, но затем анализ pem с помощью OpenSSL.crypto.load_certificate, но, увы, не повезло на устройствах с ошибками, даже если код работает с некоторыми устройствами.

Есть мысли?

1 Ответ

0 голосов
/ 01 мая 2020
... sslv3 alert bad record mac ...   

... Я прочитал кучу SO статей о подобных событиях, связанных с ошибкой проверки сертификата, однако в приведенном выше коде используется метод, описанный для устранения этой проблемы.

Ошибка, которую вы видите, не связана с проверкой сертификата, и поэтому обходные пути в этой области не будут работать здесь. Вполне вероятно, что сервер не правильно говорит по TLS или слишком сломан, чтобы иметь дело с современным TLS. Некоторые старые и / или встроенные системы имеют эти проблемы.

Возможно, можно обойти такие сломанные системы, если известно, каким образом они сломаны. Если вам удастся использовать браузер для подключения к устройству, можно посмотреть на различия в рукопожатии TLS и попытаться изменить способ подключения Python. Если даже браузер не может подключиться, вы, вероятно, потерялись.

...