簡體   English   中英

如何使用僅支持TLS 1.0的主機處理Python請求

[英]How to work with Python requests with hosts only supporting TLS 1.0

使用OPENSSL_VERSION:OpenSSL 1.1.0j並嘗試連接到似乎只支持TLS 1.0密碼並在_sslobj.do_handshake()中收到錯誤的主機。

import OpenSSL
import requests
from urllib.request import urlopen
import ssl
...

url = 'https://slpin.universalservice.org/'
urlopen(url).read()

正如您從此SSLLabs報告中看到的那樣 ,您嘗試訪問的服務器很糟糕。 它的等級為F(最差),這主要是由於其可怕的不安全密碼:

在此輸入圖像描述

唯一不可怕的不安全但只有弱密碼使用3DES。 由於這個弱點,這個密碼可能不包含在你的平台上的openssl構建中(例如,像Ubuntu這樣的基於Debian和Debian的系統沒有包含這個密碼)。

這意味着從Python腳本訪問服務器的唯一方法是使用鏈接到舊版OpenSSL或鏈接到現代版本的Python版本,但明確包含此密碼。 即便如此,您可能還需要專門啟用3DES,因為urllib會暫時禁用此功能。 因此,當使用包含3DES支持的OpenSSL構建Python時,以下應該可以工作:

import ssl
from urllib.request import urlopen

url = 'https://slpin.universalservice.org/'
ctx = ssl.create_default_context()
ctx.set_ciphers('3DES')
urlopen(url, context = ctx).read()

在我的情況下,這給出了一個403 Forbidden ,它匹配我用瀏覽器訪問此URL時得到的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM