cuốn sách gpt4 ai đã làm

python - Lỗi SSLContext tùy chỉnh Ultra HTTP2

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 13:06:03 32 4
mua khóa gpt4 Nike

Tôi đang cố gắng thực hiện yêu cầu HTTP2 tới máy chủ (lưu trữ ảo) cung cấp chứng chỉ SSL dựa trên giá trị tiêu đề máy chủ (SNI).

    # conn = hyper.HTTP20Connection('http2.akamai.com', port=443, ssl_context=context)
# conn.request('GET', '/path', headers={'Host': 'www.mywebsite.com'})

Gói Hyper-h2 của Python không hỗ trợ SNI hoặc tắt xác minh chứng chỉ! https://hyper.readthedocs.io/en/latest/advanced.html#ssl-tls-certificate-verification

Một cách để vô hiệu hóa xác minh chứng chỉ là sử dụng SSLContext tùy chỉnh và gặp lỗi xác nhận giao thức

Mã cơ bản để thực hiện cuộc gọi HTTP2 bằng SSLContext tùy chỉnh:

    nhập khẩu ssl
siêu nhập khẩu

# SSLCONTEXT tùy chỉnh để không xác minh SSLCertificate và Hostname
# hoặc cần SSLCONTEXT để được hỗ trợ SNI
bối cảnh = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
bối cảnh.verify_mode = ssl.CERT_NONE
context.check_hostname = Sai
hyper.tls._context = bối cảnh

conn = hyper.HTTP20Connection('http2.akamai.com', port=443, ssl_context=context)
conn.request('GET', '/')

in conn.get_response()

sai lầm:

    Traceback (most recent call last):
Tệp "ssl_custom.py", dòng 32, trong
conn.request('GET', '/')
Tệp "/usr/local/lib/python2.7/site-packages/hyper/http20/connection.py", dòng 281, theo yêu cầu
self.endheaders(message_body=body, Final=True, stream_id=stream_id)
Tệp "/usr/local/lib/python2.7/site-packages/hyper/http20/connection.py", dòng 544, trong tiêu đề cuối
tự kết nối ()
Tệp "/usr/local/lib/python2.7/site-packages/hyper/http20/connection.py", dòng 373, trong connect
khẳng định proto trong H2_NPN_PROTOCOLS hoặc proto == H2C_PROTOCOL
Khẳng địnhLỗi

EDIT/CẬP NHẬT: Bây giờ tôi đã học được cách xây dựng ngữ cảnh một cách chính xác init_context() Sự cố vẫn tiếp diễn khi thực hiện yêu cầu tới máy chủ hỗ trợ SNI.

ssl_context = init_context()
ssl_context.check_hostname = Sai
ssl_context.verify_mode = ssl.CERT_OPTIONAL

headers={'Host': 'www.opentable.com'}
conn = hyper.HTTP20Connection('ev-www.opentable.com.edgekey.net', port=443, ssl_context=ssl_context)
conn.request('GET', '/washington-dc-restaurants', headers=headers)

in conn.get_response()

Đầu ra:

khẳng định proto trong H2_NPN_PROTOCOLS hoặc proto == H2C_PROTOCOL

Cần một cách để xác định tương đương SNI hoặc Curl - tính năng phân tích cú pháp trong Hyper

câu trả lời hay nhất

Khi sử dụng HTTP/2 qua TLS, máy khách phải thương lượng việc sử dụng HTTP/2 với máy chủ:

các triển khai hỗ trợ HTTP/2 qua TLS PHẢI sử dụng đàm phán giao thức trong TLS [TLS-ALPN]

Việc này được thực hiện thông qua ALPN (trước đây nó được thực hiện thông qua NPN - do đó tại sao nó lại xuất hiện trong thông báo lỗi). Điều này có nghĩa là khi thiết lập ngữ cảnh bạn phải sử dụng TLS Khách hàngHelo Thông báo thông báo cho khách hàng rằng nó hỗ trợ HTTP/2.

context.set_alpn_protocols(['h2'])

Về python - Lỗi SSLContext tùy chỉnh Ultra HTTP2, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/45293922/

32 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress