Nếu bạn chỉ muốn bỏ qua xác minh, bạn có thể tạo SSLContext mới. Theo mặc định, bối cảnh mới được tạo sử dụng cert_none.just want to bypass verification, you can create a new SSLContext. By default newly created contexts use CERT_NONE.
Hãy cẩn thận với điều này như đã nêu trong Phần 17.3.7.2.1
Khi gọi trực tiếp trình xây dựng SSLContext, cert_none là mặc định. Vì nó không xác thực người ngang hàng khác, nên nó có thể không an toàn, đặc biệt là ở chế độ máy khách, nơi hầu hết thời gian bạn muốn đảm bảo tính xác thực của máy chủ mà bạn đang nói chuyện. Do đó, khi ở chế độ máy khách, rất khuyến khích sử dụng cert_rquired.
Nhưng nếu bạn chỉ muốn nó hoạt động ngay bây giờ vì một số lý do khác bạn có thể làm như sau, bạn cũng sẽ phải import ssl:
input = input.replace("!web ", "") url = "//domainsearch.p.mashape.com/index.php?name=" + input req = urllib2.Request(url, headers={ 'X-Mashape-Key': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' }) gcontext = ssl.SSLContext() # Only for gangstars info = urllib2.urlopen(req, context=gcontext).read() Message.Chat.SendMessage ("" + info)Điều này sẽ gặp phải vấn đề của bạn nhưng bạn không thực sự giải quyết bất kỳ vấn đề nào, nhưng bạn sẽ không thấy [SSL: CERTIFICATE_VERIFY_FAILED] vì bây giờ bạn không xác minh chứng chỉ!
Để thêm vào những điều trên, nếu bạn muốn biết thêm về lý do tại sao bạn đang thấy những vấn đề này, bạn sẽ muốn xem PEP 476.
PEP này đề xuất cho phép xác minh chữ ký chứng chỉ X509, cũng như xác minh tên máy chủ cho các máy khách HTTP của Python theo mặc định, có thể từ chối trên cơ sở mỗi cuộc gọi. Thay đổi này sẽ được áp dụng cho Python 2.7, Python 3.4 và Python 3.5.
Có một lời khuyên từ chối không giống với lời khuyên của tôi ở trên:
import ssl # This restores the same behavior as before. context = ssl._create_unverified_context() urllib.urlopen("//no-valid-cert", context=context)Nó cũng có một tùy chọn rất nản lòng thông qua việc điếm mà bạn không thường thấy trong Python:highly discouraged option via monkeypatching which you don't often see in python:
import ssl ssl._create_default_https_context = ssl._create_unverified_contextTrong đó ghi đè chức năng mặc định để tạo ngữ cảnh với hàm để tạo bối cảnh chưa được xác minh.
Xin lưu ý với điều này như đã nêu trong PEP:
Hướng dẫn này nhằm chủ yếu vào các quản trị viên hệ thống muốn áp dụng các phiên bản Python mới hơn thực hiện PEP này trong các môi trường cũ chưa hỗ trợ xác minh chứng chỉ trên các kết nối HTTPS. Ví dụ, một quản trị viên có thể từ chối bằng cách thêm khỉ ở trên để sitecustomize.py trong môi trường hoạt động tiêu chuẩn của họ cho Python. Các ứng dụng và thư viện không nên làm cho quá trình thay đổi này rộng rãi (ngoại trừ có lẽ để đáp ứng với cài đặt cấu hình do quản trị viên hệ thống điều khiển).Applications and libraries SHOULD NOT be making this change process wide (except perhaps in response to a system administrator controlled configuration setting).
Nếu bạn muốn đọc một bài báo về lý do tại sao không xác nhận CERTS là xấu trong phần mềm, bạn có thể tìm thấy nó ở đây!
SSL Chứng chỉ_verify_fails Các lỗi thường xảy ra do chứng chỉ mặc định Python lỗi thời hoặc chứng chỉ gốc không hợp lệ. Chúng tôi sẽ đề cập đến cách khắc phục vấn đề này theo 4 cách trong bài viết này.
Tại sao chứng chỉ_verify_failed & nbsp; xảy ra?
Kết nối SSL sẽ được thiết lập dựa trên quy trình sau. & NBSP; & nbsp; Chúng tôi sẽ nhận được lỗi nếu bất kỳ bước nào trong số này không suôn sẻ.
Đối với chứng chỉ lỗi này_verify_failed, nó thường xảy ra trong bước 2 và bước 3.
- Khách hàng gửi một yêu cầu đến máy chủ cho một phiên an toàn. Máy chủ trả lời bằng cách gửi chứng chỉ kỹ thuật số X.509 cho máy khách.
- Máy khách nhận được chứng chỉ kỹ thuật số của máy chủ X.509.
- Máy khách xác thực máy chủ, sử dụng danh sách các cơ quan chứng chỉ đã biết.
- Máy khách tạo ra một khóa đối xứng ngẫu nhiên và mã hóa nó bằng khóa công khai máy chủ.
- Hiện tại, máy khách và máy chủ đều biết khóa đối xứng và có thể sử dụng quy trình mã hóa SSL để mã hóa và giải mã thông tin có trong yêu cầu của máy khách và phản hồi máy chủ.
Khi máy khách nhận được chứng chỉ máy chủ, nó bắt đầu chuỗi chứng chỉ đó trở lại gốc. Nó sẽ bắt đầu bằng cách theo chuỗi đến trung gian đã được cài đặt, từ đó nó tiếp tục truy tìm ngược cho đến khi nó đến một chứng chỉ gốc đáng tin cậy.
Nếu chứng chỉ là hợp lệ và có thể được xiềng xích trở lại một gốc đáng tin cậy, nó sẽ được tin cậy. Nếu nó có thể được xiềng xích trở lại một gốc đáng tin cậy, trình duyệt sẽ đưa ra cảnh báo về chứng chỉ.
Thông tin lỗi về chứng chỉ_verify_failed
Chúng tôi sẽ thấy lỗi sau.
Chứng chỉ SSL là gì
Chứng chỉ máy chủ là loại chứng chỉ X.509 phổ biến nhất. Chứng chỉ SSL/TLS được cấp cho tên máy chủ (tên máy như ‘ABC-SERVER-02, hoặc tên miền như Google.com).
Chứng chỉ máy chủ là một tệp được cài đặt trên máy chủ gốc của trang web. Nó chỉ đơn giản là một tệp dữ liệu chứa khóa công khai và danh tính của chủ sở hữu trang web, cùng với các thông tin khác. Không có chứng chỉ máy chủ, lưu lượng truy cập của trang web có thể được mã hóa bằng TLS.
Về mặt kỹ thuật, bất kỳ chủ sở hữu trang web nào cũng có thể tạo chứng chỉ máy chủ của riêng họ và các chứng chỉ đó được gọi là chứng chỉ tự ký. Tuy nhiên, các trình duyệt không coi các chứng chỉ tự ký là đáng tin cậy như chứng chỉ SSL do cơ quan chứng chỉ cấp.
Làm thế nào để sửa chữa chứng chỉ_verify_failed?
Nếu bạn nhận được lỗi của Chứng chỉ_verify_fails khi cố gắng kết nối với một trang web, điều đó có nghĩa là chứng chỉ trên trang web không được tin cậy. Có một vài cách khác nhau để khắc phục lỗi này.
Chúng tôi sẽ bỏ qua kiểm tra chứng chỉ SS trong ba giải pháp đầu tiên. & NBSP; Đối với giải pháp thứ tư, chúng tôi sẽ cài đặt chứng chỉ CA mới nhất từ Certifi.
Tạo ngữ cảnh chưa được xác minh trong SSL
Nhập bối cảnh SSL = SSL._Create_Unverified_Context () urllib.Request.urropen (req, bối cảnh = bối cảnh)
context = ssl._create_unverified_context()
urllib.request.urlopen(req,context=context)
Tạo ngữ cảnh HTTPS chưa được xác minh trong SSL
Nhập SSL SSL._CREATE_DEFAULT_HTTPS_CONTEXT = SSL._CREATE_UNVERIDE_CONTEXT URLLIB2.URLOPEN (
ssl._create_default_https_context = ssl._create_unverified_context
urllib2.urlopen(“//google.com”).read()
Sử dụng mô -đun yêu cầu và đặt xác minh SSL thành sai
Yêu cầu.get (URL, Headers = Hostreferer, xác minh = Sai)
Cập nhật chứng chỉ SSL với PIP
Chúng tôi cũng có thể cập nhật chứng chỉ SSL của chúng tôi với PIP. & NBSP; Tất cả những gì chúng ta sẽ phải làm là & nbsp; Để cập nhật thư mục chứng chỉ SSL của chúng tôi với đoạn mã sau: Cài đặt PIP
Những gì lệnh này làm là cập nhật thư mục chứng chỉ SSL của hệ thống của chúng tôi.
Reference:
Hiểu chứng chỉ SSL
Kiểm tra chuỗi chứng chỉ SSL với các ví dụ OpenSSL