Я использую python для доступа к коммутаторам Aruba через API. Я хочу использовать HTTPS, чтобы мой трафик c (который отправляет имена пользователей и пароли для проверки) был зашифрован:
import requests
import json
import base64
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
import certifi
url = 'https://10.4.10.10/rest/v3/'
creds = {'userName': 'username', 'password': 'password'}
command = 'show config'
s = requests.Session()
r = s.post(url + 'login-sessions', data=json.dumps(creds), timeout=1)
print(r.json())
cookie_response = r.json()['cookie']
if r.status_code != 201:
print('Login error, status code {}'.format(r.status_code))
Я создал самоподписанный сертификат в интерфейсе командной строки, а затем смог возьмите его, поместив IP-адрес в chrome (с https: // перед ним), а затем загрузив файл сертификата. Мне пришлось использовать openssl для преобразования типа файла сертификата в .pem. Наконец, я открыл файл в текстовом редакторе и добавил сертификат в конец файла cacert.pem, который используется модулем Requests. После всего этого я все еще получаю следующую ошибку:
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)
Я обыскал все, но все еще не могу найти решение. Любая помощь или идеи будут приняты с благодарностью! Спасибо!
-EDIT-
Вот содержимое сертификата, который я использую:
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
17:13:91:1c:86:72:ae:bd:01:27:28:39:8f:4e:5a:2d:18:ae:1f:04
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=testSwitch, OU=OCSwitch, O=OC, L=Edmond, ST=Oklahoma, C=US
Validity
Not Before: Jun 16 10:59:12 2020 GMT
Not After : Jun 16 23:59:59 2021 GMT
Subject: CN=testSwitch, OU=OCSwitch, O=OC, L=Edmond, ST=Oklahoma, C=US
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:be:6a:27:02:f5:6a:98:19:0f:db:c7:11:26:dd:
77:26:bd:18:ef:ab:62:53:3e:13:a1:61:b0:5a:88:
77:d8:ba:81:56:2a:7d:66:0a:2c:cd:f1:78:4b:35:
61:73:31:4c:4f:80:51:21:86:bf:2c:1c:95:87:cc:
e7:5f:47:d8:d8:6e:ed:d4:4f:56:79:24:01:65:c9:
72:cb:6c:7a:55:ef:9b:1b:ae:4e:28:8f:27:50:1d:
36:08:c3:85:67:2c:8a:1a:42:15:83:d2:e3:b3:ef:
d3:ce:cd:77:d5:3f:25:f5:b3:c1:ce:e8:7c:e1:cb:
fc:c5:12:e8:0a:d0:87:1b:4d
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Key Encipherment, Key Agreement
X509v3 Extended Key Usage:
TLS Web Server Authentication
Signature Algorithm: sha256WithRSAEncryption
51:01:6c:13:40:8a:73:70:96:71:ea:b1:4b:b1:36:c3:82:ed:
2b:3a:d8:b3:23:77:6e:bb:56:d5:71:56:ff:0a:66:4f:81:69:
ef:33:9e:1f:ff:20:3e:49:70:c4:8b:c9:92:65:ce:80:78:62:
0e:e4:8e:39:ee:e0:04:6d:73:67:41:1a:dd:1e:ec:19:af:45:
0b:f3:4b:2e:88:10:5e:c1:89:6b:37:d1:12:a7:23:e1:86:94:
4f:b2:8a:fd:62:d6:33:5f:14:62:50:2e:38:0f:b1:46:55:ad:
46:71:df:b3:6d:44:48:c9:72:f5:0b:0a:13:ed:9a:2f:05:5c:
05:0b
Я изменил свой код, импортировав ssl и используя ssl. get_server_certificate ():
import ssl
cert = ssl.get_server_certificate(('10.4.10.10', 443))
with open('cert.pem', 'w') as file:
file.write(cert)
Затем я указываю на 'cert.pem' с помощью verify = и все равно получаю ту же ошибку.