วิธีตรวจสอบตัวเองเซ็นใบรับรองสำหรับ http ขอร้องให้ใช้คำว่า"ขอ"ศูนย์ควบคุม kde ในโมดูลที่ลูกค้าและ"ขวด-restful"บนเซิร์ฟเวอร์(TLS1.2)

0

คำถาม

นี่คือสิ่งที่ข้าก็ทำมาจนป่านนี้แล้วนี่ ใช้ใช้ openssl,ตอนนี้ฉันต้องแฟ้มเหล่านี้: องค์.crt,องค์.กุญแจองค์.srl,เครื่องเซิร์ฟเวอร์crt,เครื่องเซิร์ฟเวอร์csr,เครื่องเซิร์ฟเวอร์กุญแจสำคัญ.

ฉันตามนี้หัดเล่น: https://carolinafernandez.github.io/development/2017/09/13/HTTPS-and-trust-chain-in-Flask

และตอนนี้มีเหมือนเซิร์ฟเวอร์:

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)

ที่ลูกค้าของเครื่องจักรฉันมีรหัส ฉันยังคัดลอกองค์.crt ไปที่เครื่อง:

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

หลังจากเริ่มเซิร์ฟเวอร์รูปแบบ api แล้วก็วิ่งไปที่ลูกค้าของรหัสผมก็ได้รับข้อความผิดพลาดที่ลูกค้าของ:

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

จุดประสงค์ของเรื่องนี้ดังนั้นฉันต้องปลอดภัยเซิร์ฟเวอร์ไปยังเซิร์ฟเวอร์การสื่อสาร. สำหรับเห็นอนาคต,มันจะจริงเป็นหนึ่งเซิร์ฟเวอร์ส่ง http ขอร้องให้คนอื่นเครื่องเซิร์ฟเวอร์ ฉันลผิดใช้รูปแบบแฟ้มสำหรับอะไรก็ตามที่ลูกค้าต้องใช้เพื่อตรวจสอบ? ฉันไม่ได้เป็นผู้เชี่ยวชาญในแบบ TLS โดยมีหมายถึง,ดังนั้นฉันไม่รู้จริงๆว่าความแตกต่างระหว่างทั้งหมดส่วนขยายแฟ้ม(ผมเห็นรอย.pem แฟ้มที่กำลังใช้อยู่ในตรวจสอบสำหรับตัวอย่าง).

ในการเชื่อมต่อฉันมาก่อนหน้านี้ฉันก็พยายามเส้นทางที่ของร่วมลูกค้าของเราpem และใช้มันในตรวจสอบสนาม

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

คำตอบที่ดีที่สุด

0

จากข้อผิดพลาดข้างล่าง [url of server] ต้องการที่จะเป็นเหมือนจริงๆ host + port ตัวอย่างเช่น 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

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่