Yêu cầu Python ném SSLError


348

Tôi đang làm việc với một kịch bản đơn giản liên quan đến CAS, kiểm tra bảo mật của jspring, chuyển hướng, v.v. Tôi muốn sử dụng các yêu cầu python của Kenneth Reitz vì đó là một công việc tuyệt vời! Tuy nhiên, CAS yêu cầu xác thực qua SSL nên tôi phải vượt qua bước đó trước. Tôi không biết yêu cầu của Python là gì? Chứng chỉ SSL này được cho là cư trú ở đâu?

Traceback (most recent call last):
  File "./test.py", line 24, in <module>
  response = requests.get(url1, headers=headers)
  File "build/bdist.linux-x86_64/egg/requests/api.py", line 52, in get
  File "build/bdist.linux-x86_64/egg/requests/api.py", line 40, in request
  File "build/bdist.linux-x86_64/egg/requests/sessions.py", line 209, in request 
  File "build/bdist.linux-x86_64/egg/requests/models.py", line 624, in send
  File "build/bdist.linux-x86_64/egg/requests/models.py", line 300, in _build_response
  File "build/bdist.linux-x86_64/egg/requests/models.py", line 611, in send
requests.exceptions.SSLError: [Errno 1] _ssl.c:503: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Bạn có thể chia sẻ thêm thông tin mã? Có vẻ như có một bước còn thiếu.
TankorSmash

5
Bạn nên luôn luôn đề cập đến các phiên bản phần mềm bạn cần trợ giúp.
Piotr Dobrogost

Tôi gặp vấn đề này khi tôi sử dụng python 3.5 tornado 4.4. HTTPRequest đặt validate_cert = True, vì vậy bạn có thể đặt Sai để xử lý nó
pan7an 18/03/2017

Câu trả lời:


460

Vấn đề bạn gặp phải là do chứng chỉ SSL không tin cậy.

Giống như @dirk đã đề cập trong một nhận xét trước đó, cách khắc phục nhanh nhất là cài đặt verify=False:

requests.get('https://example.com', verify=False)

Xin lưu ý rằng điều này sẽ khiến chứng chỉ không được xác minh. Điều này sẽ khiến ứng dụng của bạn gặp rủi ro về bảo mật, chẳng hạn như các cuộc tấn công trung gian.

Tất nhiên, áp dụng phán đoán. Như đã đề cập trong các bình luận, điều này có thể được chấp nhận đối với các ứng dụng / tập lệnh nhanh / vứt đi, nhưng thực sự không nên chuyển sang phần mềm sản xuất .

Nếu chỉ bỏ qua kiểm tra chứng chỉ không được chấp nhận trong ngữ cảnh cụ thể của bạn, hãy xem xét các tùy chọn sau, tùy chọn tốt nhất của bạn là đặt verifytham số thành một chuỗi là đường dẫn của .pemtệp chứng chỉ (mà bạn nên lấy bằng một loại bảo mật nào đó có nghĩa).

Vì vậy, kể từ phiên bản 2.0, verifytham số chấp nhận các giá trị sau, với ngữ nghĩa tương ứng của chúng:

  • True: khiến chứng chỉ được xác thực đối với các cơ quan cấp chứng chỉ tin cậy của thư viện (Lưu ý: bạn có thể xem Yêu cầu chứng chỉ gốc nào sử dụng thông qua thư viện Certifi, cơ sở dữ liệu tin cậy về RC được trích xuất từ ​​Yêu cầu: Certifi - Cơ sở dữ liệu tin cậy cho con người ).
  • False: bỏ qua xác nhận hoàn toàn chứng chỉ .
  • Đường dẫn đến tệp CA_BUNDLE cho Yêu cầu sử dụng để xác thực chứng chỉ.

Nguồn: Yêu cầu - Xác minh chứng chỉ SSL

Ngoài ra hãy xem certtham số trên cùng một liên kết.


1
Có, khi tôi sử dụng dotCloud trong ubfox, cùng một "chứng nhận xác nhận thất bại" xuất hiện. Sau khi sửa đổi "request.session (headers = headers, hook = hook, verify = false)" trong "/usr/local/lib/python2.6/dist-packages/dotcloud/client/client.py", nó đã hoạt động.
nghĩa tự làm

2
Điều này không được đánh dấu là chính xác, nhưng tôi có thể xác minh rằng nó hoạt động (trái ngược với các câu trả lời dưới đây).
khalid13

40
@ khalid13: Rìu "hoạt động" như một loại thuốc đau đầu (không đau đầu - không đau đầu). Điều đó không có nghĩa là nên sử dụng theo cách đó. verify=Falsevô hiệu hóa kiểm tra chứng chỉ SSL của máy chủ.
jfs

24
@JFSebastian Thành thật mà nói, nó phụ thuộc vào những gì bạn đang làm. Đối với ứng dụng nhanh / vứt đi của tôi, nó là quá đủ.
khalid13

5
@diyism thực hiện một thay đổi như vậy nghe có vẻ rất không an toàn
binki

111

Từ yêu cầu tài liệu về xác minh SSL :

Yêu cầu có thể xác minh chứng chỉ SSL cho các yêu cầu HTTPS, giống như trình duyệt web. Để kiểm tra chứng chỉ SSL của máy chủ, bạn có thể sử dụng đối số xác minh:

>>> requests.get('https://kennethreitz.com', verify=True)

Nếu bạn không muốn xác minh chứng chỉ SSL của mình, hãy thực hiện verify=False


4
Vâng, tôi đã thêm xác minh = Đúng, nhưng vẫn nhận được chính xác lỗi tương tự. Không thay đổi. Một cái gì đó khác phải được yêu cầu, nhưng không biết nó có thể là gì.
TedBurrows

Tôi cho rằng bây giờ tôi đã rơi vào cơn điên SSL. Tôi đã thêm cái này vào get get ban đầu của mình ... get (url1, headers = headers, cert = '/ etc / pki / tls / cert.pem', verify = True, config = my_config) Vì vậy, bây giờ tôi đang gặp lỗi này. request.exceptions.SSLError: [Errno 336265225] _ssl.c: 351: error: 140B0009: Các thói quen SSL: SSL_CTX_use_PrivateKey_file: PEM lib Tôi không biết điều này có nghĩa là gì.
TedBurrows

14
Chỉ cần đặt xác minh = Sai nếu bạn không muốn xác thực chứng chỉ, iow nếu bạn có chứng chỉ tự ký
Dirk

16
Nếu bạn có chứng chỉ tự ký, sau đó tải xuống và đặt xác minh thành tên tệp của nó. Không có lý do nào để thiết lập verify = false. xác minh = '/ path / to / cert.pem'
Matthias Urlichs

14
Xin lỗi Boud, tôi cần bỏ phiếu cho câu trả lời này vì các yêu cầu không xử lý các yêu cầu HTTPS "giống như trình duyệt web". Nếu chuỗi tin cậy SSL đầy đủ (bao gồm chứng chỉ trung gian) không được khai báo trên máy chủ và yêu cầu tải xuống chứng chỉ bổ sung, bạn sẽ nhận được lỗi xác minh SSL ở trên. Các trình duyệt web sẽ thực hiện tải xuống thêm và không gắn cờ bất kỳ lỗi chứng chỉ nào. Đây là một cách mà trình duyệt web và Yêu cầu khác nhau. Co nhung nguoi khac. Yêu cầu thực hiện một số xác minh, nhưng nó không tốt như trình duyệt.
Louis Cremen

53

Tên của tệp CA để sử dụng, bạn có thể chuyển qua verify:

cafile = 'cacert.pem' # http://curl.haxx.se/ca/cacert.pem
r = requests.get(url, verify=cafile)

Nếu bạn sử dụng verify=Truethì hãy requestssử dụng bộ CA riêng có thể không có CA đã ký chứng chỉ máy chủ của bạn.


12
@ 9emE0iL18gxCqLT: tại sao bạn nghĩ rằng tất cả các hệ thống sử dụng đường dẫn bạn cung cấp? requestscó thể được đóng gói để phân phối của bạn. Chạy python -mrequests.certsđể tìm ra nơi nó chỉ đến.
jfs

3
Nếu gói cacert của yêu cầu Python đã hết hạn, làm cách nào để cập nhật nó?
CMCDragonkai

5
Bạn không nên sử dụng nó cacert.pemtừ curl. Nó chứa nhiều certs bị thu hồi. Kiểm tra Certifi (mà Yêu cầu sử dụng): certifi.io
Kenneth Reitz

3
@KennethReitz: 1- những gì Yêu cầu sử dụng không thành công cho OP (nếu không có câu hỏi) 2- cacert.pemlà chứng chỉ CA được trích xuất từ ​​Mozilla (bởi cURL) - đó chỉ là một ví dụ (nếu danh sách CA được sử dụng bởi một trang web phổ biến -browser không thể được sử dụng làm ví dụ sau đó tôi không biết điều gì có thể xảy ra) - điểm của câu trả lời rằng bạn có thể vượt qua tệp CA của riêng mình nếu danh sách mặc định không thành công.
jfs

Bạn có thể làm điều này và sử dụng chứng chỉ ứng dụng khách cùng một lúc không? Tôi đang gặp vấn đề với điều này.
dùng1156544

42

$ pip install -U requests[security]

  • Đã thử nghiệm trên Python 2.7.6 @ Ubuntu 14.04.4 LTS
  • Đã thử nghiệm trên Python 2.7.5 @ MacOSX 10.9.5 (Mavericks)

Khi câu hỏi này được mở (2012-05), phiên bản Yêu cầu là 0.13.1. Trên phiên bản 2.4.1 (2014-09), các tính năng bổ sung "bảo mật" đã được giới thiệu, sử dụng certifigói nếu có.

Ngay bây giờ (2016-09) phiên bản chính là 2.11.1, hoạt động tốt mà không cần verify=False . Không cần sử dụng requests.get(url, verify=False), nếu được cài đặt với requests[security]tính năng bổ sung.


7
cố định pip install -U requests[security] --no-cachehai lần vàpip install certifi==2015.04.28
Aamir Abro 4/12/2016

@alanjds Điều gì xảy ra nếu tôi muốn cấu hình python để tin tưởng một số chứng chỉ ssl hoặc vô hiệu hóa xác minh chứng chỉ nhưng trên toàn cầu trong môi trường mà không cần chỉnh sửa mã nguồn? Ví dụ: nếu tôi tải xuống các tiện ích Python hiện có (ví dụ AWS CLI) và tôi muốn tin tưởng certs hoặc bỏ qua xác thực chứng chỉ cho các công cụ đó?
Howiecamp

@Howiecamp sau đó bạn có thể đi qua câu trả lời của jf-sebastian, tôi đoán: stackoverflow.com/a/12865159/798575
alanjds 13/03/2017

@alanjds Nhưng không phải câu trả lời của anh ta cho rằng tôi đang viết mã và / hoặc có quyền truy cập vào mã? Tôi đang tìm cách thực hiện điều này ở cấp độ môi trường.
Howiecamp

3
làm pip install --upgrade piptrước khi cài đặt gói bảo mật yêu cầu để tránh các lỗi khác
Vincent Claes

40

Tôi đã gặp vấn đề tương tự và chứng chỉ ssl xác minh sự cố không thành công khi sử dụng aws boto3, bằng cách xem lại mã boto3, tôi thấy REQUESTS_CA_BUNDLEkhông được đặt, vì vậy tôi đã sửa cả hai vấn đề bằng cách đặt thủ công:

from boto3.session import Session
import os

# debian
os.environ['REQUESTS_CA_BUNDLE'] = os.path.join(
    '/etc/ssl/certs/',
    'ca-certificates.crt')
# centos
#   'ca-bundle.crt')

Đối với aws-cli, tôi đoán cài đặt REQUESTS_CA_BUNDLE ~/.bashrcsẽ khắc phục sự cố này (không được kiểm tra vì aws-cli của tôi hoạt động mà không có nó).

REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt # ca-bundle.crt
export REQUESTS_CA_BUNDLE

2
Điều này đã khắc phục vấn đề của tôi! Tôi đã sử dụng Charles Proxy trên Mac để gỡ lỗi thư viện thực hiện các cuộc gọi JSON đến API HTTPS. Tôi đã cài đặt chứng chỉ Charless như được chỉ định, thêm nó vào móc khóa, nhưng Python vẫn không thành công với: SSLError: ("bắt tay xấu: Lỗi ([('thói quen SSL', 'ssl3_get_server_cert ve', 'chứng nhận xác nhận thất bại')],)" ,) Để khắc phục điều này, tôi đã kết thúc theo lời khuyên của bạn về việc thêm REQUESTS_CA_BUNDLE và xuất chứng chỉ Charles từ móc khóa của tôi dưới dạng tệp .pem. Bây giờ, nó hoạt động!
mallyvai

Cảm ơn, vấn đề tương tự xảy ra với Fiddler đã mở
user565447

@ user565447 Tôi đang cố gắng để điều này hoạt động với Fiddler ngay bây giờ. Có nên đặt REQUESTS_CA_BUNDLE thành chứng chỉ của Fiddler không?
Howiecamp

19

Trong trường hợp bạn có một thư viện dựa vào requestsvà bạn không thể sửa đổi đường dẫn xác minh (như với pyvmomi) thì bạn sẽ phải tìm cacert.pemgói kèm theo yêu cầu và nối thêm CA của bạn vào đó. Đây là một cách tiếp cận chung để tìm cacert.pemvị trí:

các cửa sổ

C:\>python -c "import requests; print requests.certs.where()"
c:\Python27\lib\site-packages\requests-2.8.1-py2.7.egg\requests\cacert.pem

linux

#  (py2.7.5,requests 2.7.0, verify not enforced)
root@host:~/# python -c "import requests; print requests.certs.where()"
/usr/lib/python2.7/dist-packages/certifi/cacert.pem

#  (py2.7.10, verify enforced)
root@host:~/# python -c "import requests; print requests.certs.where()"
/usr/local/lib/python2.7/dist-packages/requests/cacert.pem

btw. @ request-devs, gói các câu hỏi của riêng bạn với yêu cầu thực sự, thực sự gây phiền nhiễu ... đặc biệt là thực tế là bạn dường như không sử dụng hệ thống lưu trữ ca trước và điều này không được ghi lại ở bất cứ đâu.

cập nhật

trong các trường hợp, khi bạn đang sử dụng thư viện và không có quyền kiểm soát đối với vị trí ca-bundle, bạn cũng có thể đặt rõ ràng vị trí ca-bund thành bó ca-host của bạn:

REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-bundle.crt python -c "import requests; requests.get('https://somesite.com';)"

Một trăm lần này: chính là không có khả năng sửa đổi verifyđường dẫn.
ghukill

Nếu bạn đang sử dụng chứng chỉ tự ký thì sao? CA sẽ là gì trong trường hợp đó?
dùng1114

Cập nhật nhỏ - cho python 3.6, cần có dấu ngoặc đơn cho lệnh in - python -c "nhập yêu cầu; in (
request.certs.where

15

Tôi gặp vấn đề tương tự khi sử dụng gs rải và các lệnh này hoạt động với tôi:

sudo pip uninstall -y certifi
sudo pip install certifi==2015.04.28

Điều này đã làm điều đó cho tôi. Cảm ơn :)
alex-mcleod

4
Điều này có nhược điểm là cài đặt lại các chứng chỉ có khả năng bị thu hồi / không tin cậy từ phiên bản cũ của certifi, KHÔNG được đề xuất.
dragon788

nếu vì một lý do nào đó, bạn buộc phải gắn bó với phiên bản đầu tiên của python 2.7, hạ cấp certifi là cách tiếp cận duy nhất hiệu quả với tôi
nghĩa là

15

Nếu bạn muốn loại bỏ các cảnh báo, sử dụng mã dưới đây.

import urllib3

urllib3.disable_warnings()

verify=Falsevới request.gethoặc postphương pháp


12

Tôi đã tìm thấy một cách tiếp cận cụ thể để giải quyết một vấn đề tương tự. Ý tưởng là chỉ tập tin cacert được lưu trữ tại hệ thống và được sử dụng bởi các ứng dụng dựa trên ssl khác.

Trong Debian (Tôi không chắc nếu cùng phân phối khác), các tệp chứng chỉ (.pem) được lưu trữ tại /etc/ssl/certs/Vì vậy, đây là mã phù hợp với tôi:

import requests
verify='/etc/ssl/certs/cacert.org.pem'
response = requests.get('https://lists.cacert.org', verify=verify)

Để đoán pemtập tin nào được chọn, tôi đã duyệt đến url và kiểm tra Tổ chức phát hành chứng chỉ (CA) nào đã tạo chứng chỉ.

EDIT: nếu bạn không thể chỉnh sửa mã (vì bạn đang chạy ứng dụng thứ ba), bạn có thể thử thêm pemchứng chỉ trực tiếp vào /usr/local/lib/python2.7/dist-packages/requests/cacert.pem(ví dụ: sao chép mã vào cuối tệp).


2
Bài đăng liên quan để gỡ lỗi CA_BUNDLE được sử dụng bởi python.
chk

Điều gì về việc thay thế /usr/local/lib/python2.7/dist-packages/requests/cacert.pembằng một liên kết tượng trưng đến cửa hàng hệ điều hành?
CMCDragonkai

8

Nếu bạn không bận tâm về chứng chỉ, hãy sử dụng verify=False.

import requests

url = "Write your url here"

returnResponse = requests.get(url, verify=False)

7

Sau nhiều giờ gỡ lỗi, tôi chỉ có thể làm việc này bằng các gói sau:

requests[security]==2.7.0  # not 2.18.1
cryptography==1.9  # not 2.0

sử dụng OpenSSL 1.0.2g 1 Mar 2016

Không có các gói verify=Falsenày đã không hoạt động.

Tôi hi vọng điêu nay se giup được ai đo.


5

Tôi gặp vấn đề tương tự. Hóa ra tôi đã không cài đặt chứng chỉ trung gian trên máy chủ của mình (chỉ cần thêm nó vào dưới cùng của chứng chỉ của bạn như được thấy bên dưới).

https://www.digicert.com/ssl-support/pem-ssl-creation.htmlm

Hãy chắc chắn rằng bạn đã cài đặt gói chứng chỉ ca:

sudo apt-get install ca-certificates

Cập nhật thời gian cũng có thể giải quyết điều này:

sudo apt-get install ntpdate
sudo ntpdate -u ntp.ubuntu.com

Nếu bạn đang sử dụng chứng chỉ tự ký, có thể bạn sẽ phải thêm nó vào hệ thống của mình theo cách thủ công.


Lưu ý, điều này chỉ áp dụng cho các cài đặt Yêu cầu thông qua apt-get, được Debian / Ubuntu sửa đổi để sử dụng các hệ thống. Yêu cầu các tàu thích hợp với gói CA riêng, được quản lý cẩn thận: certifi.io
Kenneth Reitz

CA gốc không nên là đủ? Tại sao bạn cần các trung gian?
timmy

5

Nếu các cuộc gọi yêu cầu được chôn ở đâu đó sâu trong mã và bạn không muốn cài đặt chứng chỉ máy chủ, thì, chỉ với mục đích gỡ lỗi , có thể yêu cầu bắt chước:

import requests.api
import warnings


def requestspatch(method, url, **kwargs):
    kwargs['verify'] = False
    return _origcall(method, url, **kwargs)

_origcall = requests.api.request
requests.api.request = requestspatch
warnings.warn('Patched requests: SSL verification disabled!')

Không bao giờ sử dụng trong sản xuất!


4

Tôi đoán là quá muộn cho bữa tiệc nhưng tôi muốn dán bản sửa lỗi cho những kẻ lang thang như tôi! Vì vậy, phần sau đây phù hợp với tôi trên Python 3.7.x

Nhập nội dung sau vào thiết bị đầu cuối của bạn

pip install --upgrade certifi      # hold your breath..

Hãy thử chạy lại tập lệnh / yêu cầu của bạn và xem nó có hoạt động không (tôi chắc chắn nó chưa được sửa!). Nếu nó không hoạt động thì hãy thử chạy lệnh sau trong terminal trực tiếp

open /Applications/Python\ 3.6/Install\ Certificates.command  # please replace 3.6 here with your suitable python version

3

Tôi đã chiến đấu với vấn đề này trong GIỜ.

Tôi đã cố gắng để cập nhật yêu cầu. Sau đó tôi cập nhật certifi. Tôi đã chỉ xác minh tới certifi.where () (Mã này thực hiện điều này theo mặc định). Không có gì làm việc.

Cuối cùng tôi đã cập nhật phiên bản python của mình lên python 2.7.11. Tôi đã dùng Python 2.7.5 có một số điểm không tương thích với cách xác nhận các chứng chỉ. Khi tôi cập nhật Python (và một số phụ thuộc khác), nó bắt đầu hoạt động.


Nếu bạn cập nhật OpenSSL lên phiên bản> 1.0.1, thì đó có lẽ là vấn đề. Xem câu trả lời của tôi dưới đây. stackoverflow.com/a/44543047/1413201
Tim Ludwinski

Đi từ Python 2.7.9 đến 2.7.10 đã sửa lỗi này cho tôi.
crazystick

3

Điều này tương tự như câu trả lời của @ rafael-almeida, nhưng tôi muốn chỉ ra rằng theo yêu cầu 2.11+, không có 3 giá trị nào verifycó thể thực hiện, thực tế có 4:

  • True: xác nhận đối với các CA đáng tin cậy nội bộ của yêu cầu.
  • False: bỏ qua xác nhận hoàn toàn chứng chỉ . (Không được khuyến khích)
  • Đường dẫn đến tệp CA_BUNDLE. yêu cầu sẽ sử dụng điều này để xác nhận chứng chỉ của máy chủ.
  • Đường dẫn đến một thư mục chứa các tệp chứng chỉ công cộng. yêu cầu sẽ sử dụng điều này để xác nhận chứng chỉ của máy chủ.

Phần còn lại của câu trả lời của tôi là về số 4, cách sử dụng thư mục chứa chứng chỉ để xác thực:

Có được các chứng chỉ công cộng cần thiết và đặt chúng trong một thư mục.

Nói một cách chính xác, có lẽ bạn "nên" sử dụng phương pháp ngoài băng thông để lấy chứng chỉ, nhưng bạn cũng có thể tải xuống bằng bất kỳ trình duyệt nào.

Nếu máy chủ sử dụng chuỗi chứng chỉ, hãy đảm bảo có được mọi chứng chỉ trong chuỗi.

Theo tài liệu yêu cầu, thư mục chứa chứng chỉ trước tiên phải được xử lý bằng tiện ích "thử lại" ( openssl rehash).

(Điều này đòi hỏi openssl 1.1.1+, và không phải tất cả các Windows triển khai openssl hỗ trợ rehash. Nếu openssl rehashsẽ không làm việc cho bạn, bạn có thể thử chạy ruby script rehash tại https://github.com/ruby/openssl/blob/master /sample/c_rehash.rb , mặc dù tôi chưa thử cái này.)

Tôi gặp một số rắc rối với việc yêu cầu nhận chứng chỉ của mình, nhưng sau khi tôi sử dụng openssl x509 -outform PEMlệnh để chuyển đổi certs sang .pemđịnh dạng Base64 , mọi thứ đều hoạt động hoàn hảo.

Bạn cũng có thể lười biếng luyện tập lại:

try:
    # As long as the certificates in the certs directory are in the OS's certificate store, `verify=True` is fine.
    return requests.get(url, auth=auth, verify=True)
except requests.exceptions.SSLError:
    subprocess.run(f"openssl rehash -compat -v my_certs_dir", shell=True, check=True)
    return requests.get(url, auth=auth, verify="my_certs_dir")

2

Hiện tại có một sự cố trong mô-đun yêu cầu gây ra lỗi này, có trong v2.6.2 đến v2.12.4 (ATOW): https://github.com/kennethreitz/requests/issues/2573

Giải pháp cho vấn đề này là thêm dòng sau: requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS'


FWIW, nó vẫn hiện diện với các yêu cầu == 2.13.0. Cách giải quyết trên sửa nó vẫn còn.
Tamás Szelei

1

Như @Rafael Almeida đã đề cập, vấn đề bạn gặp phải là do chứng chỉ SSL không tin cậy. Trong trường hợp của tôi, chứng chỉ SSL không được máy chủ của tôi tin cậy. Để giải quyết vấn đề này mà không ảnh hưởng đến bảo mật, tôi đã tải xuống chứng chỉ và cài đặt nó trên máy chủ (chỉ cần nhấp đúp vào tệp .crt và sau đó Cài đặt Chứng chỉ ...).


0

Không thể thêm tùy chọn nếu các yêu cầu được gọi từ gói khác. Trong trường hợp đó, việc thêm chứng chỉ vào gói cacert là đường dẫn thẳng, ví dụ: tôi phải thêm "Máy chủ trung gian chính lớp 1 StartCom", mà tôi đã tải chứng chỉ gốc vào StartComClass1.pem. đưa ra virtualenv của tôi được đặt tên là caldav, tôi đã thêm chứng chỉ với:

cat StartComClass1.pem >> .virtualenvs/caldav/lib/python2.7/site-packages/pip/_vendor/requests/cacert.pem
cat temp/StartComClass1.pem >> .virtualenvs/caldav/lib/python2.7/site-packages/requests/cacert.pem

một trong số đó có thể là đủ, tôi đã không kiểm tra


0

Tôi đã có một vấn đề xác nhận tương tự hoặc tương tự. Tôi đọc rằng các phiên bản OpenSSL nhỏ hơn 1.0.2, yêu cầu phụ thuộc vào đôi khi gặp khó khăn khi xác nhận chứng chỉ mạnh (xem tại đây ). CentOS 7 dường như sử dụng 1.0.1e dường như có vấn đề.

Tôi không chắc chắn làm thế nào để khắc phục vấn đề này trên CentOS, vì vậy tôi đã quyết định cho phép chứng chỉ CA 1024bit yếu hơn.

import certifi # This should be already installed as a dependency of 'requests'
requests.get("https://example.com", verify=certifi.old_where())

Tôi sử dụng Python 2.7.10 được cài đặt bởi ArcGIS và không có mô-đun certifi nào được cài đặt. Mô-đun yêu cầu được cài đặt là trong phiên bản 2.11.1.
Lucas

0

Tôi đã phải nâng cấp từ Python 3.4.0 lên 3.4.6

pyenv virtualenv 3.4.6 myvenv
pyenv activate myvenv
pip install -r requirements.txt

0

Trong trường hợp của tôi lý do là khá tầm thường.

Tôi đã biết rằng xác minh SSL đã hoạt động cho đến vài ngày trước đó và vẫn hoạt động trên một máy khác.

Bước tiếp theo của tôi là so sánh nội dung và kích thước chứng chỉ giữa máy mà xác minh đang hoạt động và máy không hoạt động.

Điều này nhanh chóng dẫn đến việc tôi xác định rằng Chứng chỉ trên máy làm việc 'không chính xác' là không tốt và một khi tôi thay thế bằng chứng nhận 'tốt', mọi thứ đều ổn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.