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.