Hướng dẫn python requests requests_ca_bundle - python yêu cầu request_ca_bundle

Tôi đã cài đặt chứng chỉ CA gốc tự ký vào

Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
3 của Debian và cài đặt chúng với
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
4. Tại thời điểm này
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
5 rất vui, và
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
6 rất vui, nhưng mô -đun Python2 và Python3 yêu cầu khẳng định nó không hài lòng với chứng chỉ.

python2:

Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)

python3

Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)

Tại sao Python bỏ qua gói CA chứng minh hệ thống và làm thế nào để tôi tích hợp nó?

import requests
data = {'foo':'bar'}
url = 'https://foo.com/bar'
r = requests.post(url, data=data)

Nếu URL sử dụng chứng chỉ tự ký, điều này sẽ thất bại với

Nội phân chính

  • Làm cách nào để kiểm tra xem giấy chứng nhận Python có phải không
  • Làm cách nào để vô hiệu hóa kiểm tra chứng chỉ bảo mật cho yêu cầu trong Python?
  • Yêu cầu Python có sử dụng HTTPS không?
  • Yêu cầu có sử dụng certifi không?

requests.exceptions.SSLError: [Errno 1] _ssl.c:507: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Yêu cầu sử dụng chứng chỉ từ Chứng nhận gói.

r = requests.post(url, data=data, verify=False)

Nếu URL sử dụng chứng chỉ tự ký, điều này sẽ thất bại với

Nội phân chính

Tôi biết rằng tôi có thể chuyển

Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
7 cho tham số
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
8, như thế này:3 gold badges29 silver badges72 bronze badges

Tuy nhiên, những gì tôi muốn làm là các yêu cầu chỉ vào một bản sao của khóa công khai trên đĩa và bảo nó tin tưởng chứng chỉ đó.May 22, 2015 at 21:06

frlanMatthew Moisen

6.7683 huy hiệu vàng29 Huy hiệu bạc72 Huy hiệu đồng25 gold badges108 silver badges212 bronze badges

1

try:

r = requests.post(url, data=data, verify='/path/to/public_key.pem')

Khi được hỏi ngày 22 tháng 5 năm 2015 lúc 21:06May 22, 2015 at 21:12

12

Matthew Moisenmatthew Moisen

requests.get(url, verify=path_to_bundle_file)

15.1K25 Huy hiệu vàng108 Huy hiệu bạc212 Huy hiệu Đồng

Đã trả lời ngày 22 tháng 5 năm 2015 lúc 21:12

Với tham số

Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
8, bạn có thể cung cấp gói cơ quan chứng chỉ tùy chỉnhMay 22, 2015 at 21:14

0

Từ các tài liệu:

export REQUESTS_CA_BUNDLE=/path/to/your/certificate.pem
python script.py

Bạn có thể chuyển

Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
8 Đường dẫn đến tệp CA_Bundle với chứng chỉ CAS đáng tin cậy. Danh sách CAS đáng tin cậy này cũng có thể được chỉ định thông qua biến môi trường yêu cầu_ca_bundle.

echo "export REQUESTS_CA_BUNDLE=/path/to/your/certificate.pem" >> ~/.bash_profile ; source ~/.bash_profile

Đã trả lời ngày 22 tháng 5 năm 2015 lúc 21:14May 12, 2017 at 10:20

Dễ nhất là xuất biến

import requests
data = {'foo':'bar'}
url = 'https://foo.com/bar'
r = requests.post(url, data=data)
1 chỉ vào cơ quan chứng chỉ riêng của bạn hoặc gói chứng chỉ cụ thể. Trên dòng lệnh, bạn có thể làm điều đó như sau:Mike N

Nếu bạn có thẩm quyền chứng chỉ của mình và bạn không muốn nhập

import requests
data = {'foo':'bar'}
url = 'https://foo.com/bar'
r = requests.post(url, data=data)
2 mỗi khi bạn có thể thêm
import requests
data = {'foo':'bar'}
url = 'https://foo.com/bar'
r = requests.post(url, data=data)
1 vào
import requests
data = {'foo':'bar'}
url = 'https://foo.com/bar'
r = requests.post(url, data=data)
4 như sau:3 gold badges23 silver badges21 bronze badges

3

Đã trả lời ngày 12 tháng 5 năm 2017 lúc 10:20

$ cp myCert-A-Root.pem ca_roots.pem
$ cat myCert-B-Root.pem >> ca_roots.pem
$ echo "export REQUESTS_CA_BUNDLE=~/PATH_TO/CA_CHAIN/ca_roots.pem" >> ~/.bash_profile ; source ~/.bash_profile

Mike nmike nJun 8, 2017 at 15:55

1

5,8453 Huy hiệu vàng23 Huy hiệu bạc21 Huy hiệu đồng

Trường hợp cần giải quyết nhiều chứng chỉ như sau: Concatenate các tệp PEM nhiều gốc, MyCert-A-Root.PEM và MyCert-B-Root.pem, vào một tệp. Sau đó đặt các yêu cầu yêu cầu_ca_bundle var thành tệp đó trong ./.bash_profile của tôi.Sep 21, 2017 at 7:21

Đã trả lời ngày 8 tháng 6 năm 2017 lúc 15:55gizzmole

Đặt

import requests
data = {'foo':'bar'}
url = 'https://foo.com/bar'
r = requests.post(url, data=data)
5 nên thực hiện công việc.16 silver badges24 bronze badges

2

Đã trả lời ngày 21 tháng 9 năm 2017 lúc 7:21

Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
0

Gizzmolegizzmole

1.29916 huy hiệu bạc24 Huy hiệu đồngSep 28, 2021 at 11:11

Nếu bạn đứng sau tường lửa mạng của công ty như tôi, hãy hỏi quản trị viên mạng của bạn ở đâu chứng chỉ công ty của bạn, sau đó:Jordan M

Các vấn đề cố định này tôi đã gặp phải với các yêu cầu và openSSL.2 silver badges6 bronze badges

Đã trả lời ngày 28 tháng 9 năm 2021 lúc 11:11

Jordan Mjordan m

1532 Huy hiệu bạc6 Huy hiệu Đồng

  1. Tất cả các câu trả lời cho câu hỏi này đều chỉ ra cùng một đường dẫn: lấy tệp PEM, nhưng họ không cho bạn biết cách lấy nó từ chính trang web.

  2. Nhận tệp PEM từ chính trang web là một tùy chọn hợp lệ nếu bạn tin tưởng trang web, chẳng hạn như trên máy chủ công ty nội bộ. Nếu bạn tin tưởng trang web, tại sao bạn nên làm điều này? Bạn nên làm điều này bởi vì nó giúp bảo vệ bản thân và những người khác khỏi việc vô tình sử dụng lại mã của bạn trên một trang web không an toàn.

  3. Đây là cách bạn có thể nhận được tệp PEM.

  4. Nhấp vào khóa bên cạnh URL.

import requests
data = {'foo':'bar'}
url = 'https://foo.com/bar'
r = requests.post(url, data=data)
8

Đã trả lời ngày 28 tháng 1 lúc 19:17Jan 28 at 19:17

FoggyfoggyFoggy

Phù hiệu đồng 1411010 bronze badges

1

Trong trường hợp bất kỳ ai tình cờ hạ cánh ở đây (như tôi đã làm) đang tìm cách thêm CA (trong trường hợp của tôi Charles Proxy) cho httplib2, có vẻ như bạn có thể nối nó vào tệp

import requests
data = {'foo':'bar'}
url = 'https://foo.com/bar'
r = requests.post(url, data=data)
9 được bao gồm trong gói Python.

Ví dụ:

Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
1

Các biến môi trường được tham chiếu trong các giải pháp khác dường như là yêu cầu cụ thể và không được HTTPLIB2 chọn trong thử nghiệm của tôi.

Đã trả lời ngày 29 tháng 6 năm 2017 lúc 2:39Jun 29, 2017 at 2:39

Mat Schaffermat SchafferMat Schaffer

1.5991 Huy hiệu vàng13 Huy hiệu bạc22 Huy hiệu đồng1 gold badge13 silver badges22 bronze badges

Trong môi trường Dev, sử dụng thơ làm nhà cung cấp env ảo trên máy Mac với Python 3.8 Tôi đã sử dụng câu trả lời này https://stackoverflow.com/a/42982144/15484549 làm cơ sở và thêm nội dung của chứng chỉ gốc tự ký của tôi cho chứng nhận của tôi cho chứng nhận Tệp cacert.pem.

Các bước chi tiết:

Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/bin/python3.5/site-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
2

Đã trả lời ngày 4 tháng 2 lúc 15:01Feb 4 at 15:01

AlexalexAlex

Phù hiệu bằng đồng 9644 bronze badges

Tôi biết đó là một chủ đề cũ. Tuy nhiên, tôi gặp phải vấn đề này gần đây. Mã yêu cầu Python của tôi không chấp nhận chứng chỉ tự ký nhưng Curl cũng vậy. Hóa ra các yêu cầu Python rất nghiêm ngặt về chứng chỉ tự ký. Nó cần phải là một chứng chỉ CA gốc. Nói cách khác,

Những hạn chế cơ bản: CA: Đúng

Việc sử dụng chính: Chữ ký số, không từ chối, mã hóa chính, dấu hiệu chứng chỉ

Đã trả lời ngày 1 tháng 4 lúc 18:50Apr 1 at 18:50

YufengyufengYufeng

Huy hiệu Bạc 211 Huy hiệu Đồng1 silver badge1 bronze badge

Làm cách nào để kiểm tra xem giấy chứng nhận Python có phải không

Để xác minh loại khóa này hoặc để kiểm tra một loại khóa không xác định trong Python, bạn có thể sử dụng phương thức isInstance được truyền trong khóa và thuật toán. Xem bên dưới để biết ví dụ về cách xác định loại khóa của khóa công khai hoặc khóa riêng trong Python. public_key = cert. public_key () nếu isinstance (public_key, rsa.use the isinstance method passing in the key and the algorithm. See below for an example on how to determine the key type of a public key or a private key in python. public_key = cert. public_key() if isinstance(public_key, rsa.

Làm cách nào để vô hiệu hóa kiểm tra chứng chỉ bảo mật cho yêu cầu trong Python?

Phương pháp 1: Truyền xác minh = Sai để yêu cầu Phương thức với URL cũng chuyển tham số xác minh = sai cho phương thức để vô hiệu hóa kiểm tra bảo mật.Passing verify=False to request method Along with the URL also pass the verify=False parameter to the method in order to disable the security checks.

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

Yêu cầu xác minh chứng chỉ SSL cho các 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 chi tiết của một tổ chức., just like a web browser. SSL Certificates are small data files that digitally bind a cryptographic key to an organization's details.

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

Yêu cầu sử dụng chứng chỉ từ Chứng nhận gói..