Мне нужно использовать сертификаты SSl для установления безопасного соединения между клиентом и сервером.
Для создания сертификатов я использовал команды:
openssl genrsa -out root.key 2048
openssl req -x509 -new -nodes -key root.key -sha256 -days 365 -out root.pem
openssl genrsa -out client.key 2048
openssl genrsa -out server.key 2048
openssl req -new -nodes -key client.key -sha256 -days 365 -out client.csr
openssl req -new -nodes -key server.key -sha256 -days 365 -out server.csr
openssl x509 -req -in client.csr -CA root.pem -CAkey root.key -CAcreateserial -out client.crt -days 365 -sha256
openssl x509 -req -in server.csr -CA root.pem -CAkey root.key -CAcreateserial -out server.crt -days 365 -sha256
Эти команды создали файлы:
- client.csr
- client.key
- root.key
- root.pem
- root.srl
- server.csr
- server.key
Мой клиент имеет код:
s= requests.session()
s.cert= ("../certificates/client.csr" , "../certificates/client.key")
s.verify = "../certificates/root.pem"
urllib3.disable_warnings()
resp = s.post('https://localhost:5000/', json = token)
Возвращает ошибку:
(...)
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)
(...)
requests.packages.urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)
(...)
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)
И мой сервер имеет код:
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
context.load_cert_chain('../certificates/server.crt', '../certificates/server.key')
context.load_verify_locations('../certificates/root.pem')
context.verify_mode= ssl.CERT_REQUIRED
(...)
if __name__ == "__main__":
app.run(debug=False, ssl_context=context, threaded=True)
Что мне делать?