Cum pentru a verifica certificat auto semnat pentru solicitările https folosind "cereri" module pe client și "balon-odihnitor" pe server (TLS1.2)

0

Problema

Aici este ceea ce am până acum. Folosind openssl, acum am aceste fisiere: ca.crt, ca.cheia, ca.srl, server.crt, server.csr-ul, server.cheie.

Am urmat acest tutorial: https://carolinafernandez.github.io/development/2017/09/13/HTTPS-and-trust-chain-in-Flask

Și acum acest lucru ca pe server:

from flask import Flask, request
from flask_restful import Resource, Api, reqparse
import psycopg2
import ssl
import sys

app = Flask(__name__)
api = Api(app)

# TODO: https security
HTTPS_ENABLED = True
VERIFY_USER = True

API_HOST = "0.0.0.0"
API_PORT = 8000
API_CRT = "server.crt"
API_KEY = "server.key"
API_CA_T = "ca.crt"

context = None
if(HTTPS_ENABLED):
    context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
    
    if(VERIFY_USER):
        context.verify_mode = ssl.CERT_REQUIRED
        context.load_verify_locations(API_CA_T)

    try:
        context.load_cert_chain(API_CRT, API_KEY)
    except Exception as e:
        sys.exit("Error starting server: {}".format(e))

...[implementation of api]...

if __name__ == '__main__':
    app.run(ssl_context=context, host=API_HOST, port=API_PORT, debug=True)

Pe masina client, am acest cod. De asemenea, am copiat ca.crt pe la masina:

import os
import requests
import ssl

def test():
    response = requests.get("https://[url of server]:8000/helloworld", verify='ca.crt')
    #response = requests.get("http://[url of server]:8000/helloworld")
    print(response.text);

def print_version():
    print(ssl.OPENSSL_VERSION)

if __name__ == "__main__":
    test()
    #print_version()

După pornirea server api și apoi rulează codul de client, I a lua acest mesaj de eroare la client:

requests.exceptions.SSLError: HTTPSConnectionPool(host='[url of server]', port=8000): Max retries exceeded with url: /helloworld (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1123)')))

Scopul este astfel încât să pot avea server securizat la serverul de comunicare. Pentru viitorul apropiat, aceasta va fi literalmente un server trimite https cereri de la un alt server. Am greșit format de fișier pentru orice client trebuie să folosească pentru a verifica? Eu nu sunt un expert în TLS, prin orice mijloace, așa că nu știu diferența dintre toate extensiile de fișiere (am văzut-o .fișier pem a fi utilizate în a verifica, de exemplu).

În interiorul link-ul ți-am arătat mai devreme, am încercat, de asemenea, traseul de producere a clientului.pem și utilizarea că, în verifice domeniu.

flask flask-restful self-signed tls1.2
2021-11-23 18:09:50
1

Cel mai bun răspuns

0

De eroare de mai jos, [url of server] trebuie să fie ca un real host + port de exemplu 127.0.0.1:8000

requests.exceptions.SSLError: HTTPSConnectionPool(host='[url of server]', port=8000): Max retries exceeded with url: /helloworld (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1123)')))
2021-12-03 16:30:10

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................