Xác minh chứng chỉ yêu cầu python không thành công: chứng chỉ tự ký trong chuỗi chứng chỉ

Vào ngày 30 tháng 9 năm 2021, Let's Encrypt (cơ quan cấp chứng chỉ phi lợi nhuận) đã cho phép một trong các chứng chỉ của họ hết hạn, khiến mọi chứng chỉ có chứng chỉ đó trong chuỗi của nó hiển thị là không hợp lệ. Điều này gây ra khá nhiều rắc rối nhưng cuối cùng họ đã phát hành một bản thay thế và thông qua khởi động lại cũng như các bản cập nhật khác, hầu hết sự cố đã biến mất

Ngoại trừ môi trường ảo Python được cài đặt với ArcGIS Pro. Khoảng thời gian này, một số quy trình tự động của tôi bắt đầu bị lỗi và không thể giải quyết chúng mặc dù chúng tôi đã khởi động lại máy và máy chủ cũng như cài đặt cục bộ các chứng chỉ thay thế mới theo cách thủ công nhưng không có gì hoạt động. Đây là một ví dụ nhanh về điều gì đó đã thất bại

import arcpy, os, requests, json

logMessages = ''

r = requests.session()

r.headers.update({'Accept': 'application/json', 'Content-Type': 'application/x-www-form-urlencoded'})

body = '''  [out:json]
[timeout:120]
;
(
way
    ["highway"="service"]
    (43.6192138,-116.4338378,43.6339976,-116.4136293);
);
out;
>;
out skel qt;'''

OSM_URL3 = 'https://overpass.kumi.systems/api/interpreter'

# reach out to the Overpass API to grab the data
try:
	respSuccess = False
	numTries = 0
	while respSuccess == False and numTries <= 10:
		numTries += 1
		response = r.post(OSM_URL3, data=body, verify=True)
		if response.status_code == 200:
			respSuccess = True
		
	logMessages += '''Requesting features from OSM:
	Response Status: {}\n'''.format(response.status_code)

except requests.exceptions.RequestException as e:
	logMessages += '{}\n'.format(e.args[0].reason)
	
print(logMessages)

điều này sẽ luôn tạo ra một thông báo như. [SSL. CERTIFICATE_VERIFY_FAILED] xác minh chứng chỉ không thành công. chứng chỉ đã hết hạn (_ssl. c. 1091)

Bởi vì các quy trình này không được ưu tiên, nên tôi đã mất vài tháng để tìm hiểu sâu hơn một chút. Tôi vừa tìm ra vấn đề và tôi muốn chia sẻ vì tôi cảm thấy như mình chỉ hiểu phiên bản rút gọn về cách thức hoạt động của Chứng chỉ SSL và có vẻ như sự thất vọng của tôi bắt nguồn từ sự hiểu biết một phần đó. Ngoài ra, nó ảnh hưởng đến quá trình tự động hóa của tôi dựa trên các yêu cầu web Python để lấy dữ liệu

Tôi nghĩ việc kiểm tra chứng chỉ hoạt động như thế nào

Ban đầu tôi nghĩ rằng một chứng chỉ chỉ cần được xác thực bởi một số cơ quan có thẩm quyền và sau đó nó sẽ cho phép lưu lượng truy cập.  

Không phải chứng chỉ được xác minh như thế nào

Chứng chỉ thực sự hoạt động như thế nào (ish)

Sự hiểu biết trước đây của tôi khiến tôi cảm thấy bế tắc vì tôi gặp phải lỗi SSL khi cố tải xuống dữ liệu bằng yêu cầu python và gặp lỗi mặc dù tôi có thể tải xuống cùng một dữ liệu bằng trình duyệt web hoặc phần mềm máy khách khác. Vậy tại sao Python là môi trường duy nhất chỉ ra chứng chỉ không hợp lệ?

Chi tiết quan trọng mà tôi đã bỏ lỡ là máy tính của tôi đã có một bản sao chứng chỉ đã tải xuống trước đó và khi Python đang kiểm tra bản nhận được từ máy chủ từ xa so với máy chủ cục bộ, bản sao cục bộ của tôi vẫn cho thấy nó đã hết hạn

Hầu như đã được giải quyết

Khi tôi hiểu điều này, tôi đã yêu cầu một số trợ giúp từ Quản trị viên hệ thống tuyệt vời của mình và được hướng dẫn cách xóa chứng chỉ đã hết hạn khỏi Cửa hàng chứng chỉ Windows của tôi và cài đặt chứng chỉ mới. Tôi biết, bạn đang nghĩ rằng tôi sẽ chỉ cho bạn cách làm điều đó nhưng tôi không phải vì nó không hoạt động và có thể có rất nhiều trang web khác sẽ dạy bạn cách làm điều đó. Tôi đang đăng bài này bởi vì tôi thực sự không thể tìm thấy nó ở bất cứ đâu

Tôi đã kết luận rằng Python không được tham chiếu các chứng chỉ trong kho lưu trữ chứng chỉ hệ điều hành của tôi và phải sử dụng chứng chỉ của chính nó. Vì vậy, tôi đã gỡ cài đặt và cài đặt ArcGIS Pro mới. Điều này vẫn không khắc phục được. Vì vậy, tôi đã cài đặt pro trên một máy tính khác và cố gắng chạy cùng một đoạn mã trên cùng một kết nối mạng. NÀY LÀM VIỆC. Nhưng tại sao máy của tôi không hoạt động?

Bản sửa lỗi thực sự

Tôi đã thực hiện một số nghiên cứu và tìm hiểu và tìm thấy dấu hiệu cho thấy Thư viện yêu cầu sử dụng gói chứng chỉ của riêng nó (một thuật ngữ mới đối với tôi) và nó được lưu trữ tại vị trí được cung cấp bằng cách chạy đoạn mã sau

import requests
print(requests.certs.where())

Vì vậy, biết rằng ArcGIS Pro đã được cài đặt lại và nó không giúp được gì, bộ cài đặt không phải đã thay thế tệp này, nó chỉ cần kiểm tra nó và di chuyển hoặc thêm dữ liệu vào nó? . Dù bằng cách nào, tôi đã đổi tên cái cũ và đặt một bản sao của chứng chỉ được tìm thấy trên máy khác sau khi cài đặt mới và BAM. Máy của tôi hiện có thể thực hiện yêu cầu web thông qua Python mà không gặp lỗi SSL

Khắc phục dễ dàng hơn

Nếu bạn gặp vấn đề tương tự, rất có thể bạn có thể gỡ cài đặt ArcGIS Pro, sau đó đảm bảo xóa chứng chỉ ở vị trí được chỉ định bởi các yêu cầu. chứng chỉ. where() trước khi cài đặt lại pro

Tôi chắc chắn rằng không nên tinh chỉnh quá nhiều với hầu hết các mục trong môi trường ảo Conda, nhưng tôi không cần phải có môi trường ảo tùy chỉnh vì tôi chỉ sử dụng các thư viện đã được bao gồm khi bạn cài đặt ArcGIS Pro. Tuy nhiên, trong một trường hợp này, điều này đã tạo nên mánh khóe

Tôi hy vọng rằng có một cách tốt hơn để cập nhật chứng chỉ trong môi trường ảo bằng cách chạy lệnh và ai đó có thể làm sáng tỏ chủ đề này

Làm cách nào để sửa lỗi SSL Certificate_verify_failed trong Python?

Giải pháp cho vấn đề của bạn. .
tải xuống chứng chỉ xác thực tên miền dưới dạng *. tệp crt hoặc *pem
mở tệp trong trình chỉnh sửa và sao chép nội dung của tệp vào khay nhớ tạm
tìm cacert của bạn. vị trí pem. từ yêu cầu. .
chỉnh sửa cacert. .
Lưu tệp và tận hưởng các yêu cầu

Làm cách nào để bỏ qua xác minh SSL trong Python?

Phương pháp 1. Truyền verify=False cho phương thức yêu cầu Cùng với URL cũng truyền tham số verify=False cho phương thức theo thứ tự .

Yêu cầu Python có sử dụng SSL không?

Yêu cầu xác minh chứng chỉ SSL cho yêu cầu HTTPS , giống như trình duyệt web. Chứng chỉ SSL là các tệp dữ liệu nhỏ liên kết kỹ thuật số khóa mật mã với thông tin chi tiết của tổ chức. Thông thường, một trang web có chứng chỉ SSL được gọi là trang web an toàn.

Xác minh chứng chỉ không thành công có nghĩa là gì?

Lỗi xác minh chứng chỉ Ruby OpenSSL không thành công có nghĩa là mã của bạn không thể xác minh rằng chứng chỉ SSL của trang web hoặc API mà bạn đang kết nối là chứng chỉ thật. It's important to solve this issue correctly to keep your communication secure.