當前位置:首頁 » 編程語言 » pythonhttps證書

pythonhttps證書

發布時間: 2022-07-13 06:12:47

python的httplib.HTTPSConnection會驗證客戶端伺服器的證書嗎

默認是不認證的。下面是一個https登錄的代碼

host = "www.user.com"
headers = {}
headers['Cookie'] = "sid=4783c845-ec9d-4ec4-a163-b67c254b8c85"
url = "/login.htm"

params = {"code":"1111",
"password":"pwd",
"username":"user"}

params = urllib.urlencode(params)
cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))

req = urllib2.Request("https://" + host + url)

response = opener.open(req, params)
for item in cookie:
print item.value, item.name

⑵ 如何使用證書存儲在python中的字元串變數打開ssl套接字

查看源代碼,ssl.wrap_socket直接調用本地代碼(openssl)函數SSL_CTX_use_cert_chain_file,它需要一個文件的路徑,因此您無法做的是嘗試做的。
參考:
在ssl
/
init
.py中,我們看到:
def
wrap_socket(sock,keyfile
=無,certfile
=無,
server_side
=
False,cert_reqs
=
CERT_NONE,
ssl_version
=
PROTOCOL_SSLv23,ca_certs
=
None,
do_handshake_on_connect
=
True):
return
SSLSocket
sock,keyfile
=
keyfile,certfile
=
certfile,
server_side
=
server_side,cert_reqs
=
cert_reqs,
ssl_version
=
ssl_version,ca_certs
=
ca_certs,
do_handshake_on_connect
=
do_handshake_on_connect)
將我們指向SSLSocket構造函數(它在同一個文件中),我們看到以下情況:
self._sslobj
=
_ssl2.sslwrap(self._sock,server_side,
keyfile,certfile,
cert_reqs,ssl_version,ca_certs)
_ssl2在C(_ssl2.c)中實現
查看sslwrap函數,我們看到它正在創建一個新對象:
return(PyObject
*)newPySSLObject(Sock,key_file
,cert_file,
server_side,verification_mode,
protocol,cacerts_file);
查看該對象的構造函數,我們最終會看到:
ret
=
SSL_CTX_use_certificate_chain_file(self->
ctx,
cert_file);
這個函數在openssl中定義,所以現在我們需要切換到那個代碼庫。
在ssl
/
ssl_rsa.c中,我們最終在函數中找到:
BIO_read_filename
in,file)
如果你深入到BIO代碼(openssl的一部分)最終成為正常的fopen():
fp
=
fopen(ptr,p)
所以它看起來像它當前寫的。它必須在C的fopen()可打開的文件中。
此外,由於python的ssl庫很快跳轉到C,我在一個解決方法中看不到一個明顯的monkeypatch的地方。

⑶ 怎麼解決使用python的requests獲得網頁時出現sslEOFError錯誤

  • importrequests

  • url="httplogin.html"

  • ret=requests.get(url,verify="/Test/ssl_address/qlchat.com.crt")

  • printret.status_code

  • 通過 verify 指定證書,表示相信此證書(52.77.252.184.crt 是伺服器端證書);也可以用 verify=False,表示不驗證伺服器端的證書。

    https的證書獲取:

    通過Chrome裡面-設置-證書,可以導出該域名的ssl證書,然後放到指定路徑,verify=證書路徑。就能直接請求https了

⑷ python requests請求ssl 加密 提示[SSL: CA_MD_TOO_WEAK] ca md too weak (_ssl.c:4024)')))

伺服器環境中的加密套件不支持這種加密方式。建議您升級一下加密套件版本到最新重新配置SSL。

⑸ Python如何使用https請求

是發送請求吧,要發送請求的話,可以去網上下載request庫,自行調用,然後可以去csdn尋找使用方法,python內部是不支持發送網路請求包的哦QwQ。

⑹ 驗證SSL使用Python的同伴問題,怎麼解決

在瀏覽器中訪問該網站時會彈出證書不受信任,但是忽略仍可繼續訪問
但當使用Python登錄時就會拋出_ssl.c:645錯誤,不能讀取頁面。
之前在做Android開發用Jsoup訪問該站時也會有問題,當時的解決辦法是寫一個方法直接信任所有Https的安全證書,就在想python是不是也是可以這樣做。
經過一番研究發現,只要忽略就行啦
很簡單
import ssl

ssl._create_default_https_context = ssl._create_unverified_context123

⑺ 如何用 Python 解析 ssl 證書文件

PyOpenSSL

OpenSSL.SSL.Connection()
get_peer_certificate()
get_peer_cert_chain()

⑻ 如何實現python介面,的https

今天寫代碼時碰到一個問題,花了幾個小時的時間google,基本上把google搜索的前幾頁內容都一一看了下,問題最終是解決了,不過過程挺曲折的,所以把這個過程記下來以便以後參考之。
原因是以下一段代碼引起的:
?

12

import urllib2urllib2.urlopen('https://xxxx.com')

本來這段代碼很簡單的,就是請求一個https的連接,可是報以下錯誤:
?

1

urllib2.URLError:

第一反應是https證書問題產生的,如是以'python ssl' 為關鍵字google後,看到大家都在用'requests'這個python組件做http請求客戶端,就像java裡面的httpclient組件一樣,如果安裝完request包後,改成如下代碼:
?

12

import requestsrequests.get('https://xxx.com')

還是報以下錯誤:
?

1

requests.exceptions.SSLError:
[Errno 1] _ssl.c:504: error:140773E8:SSL routines:SSL23_GET_SERVER_HELLO:reason(1000)

可以看出來,用requests和urllib2報的錯誤信息是一樣,可見它們都是基於相同的底層api操作的,比如基於TLS的socket連接。到這里的時候我懷疑這個問題不是python代碼寫的有問題,可能是操作系統級別的設置錯了。如下直接在shell客戶端運行如下測試腳本
?

1

wget
https://xxx.com

果然報如下錯誤:
?

12

OpenSSL:
error:140773E8:SSL routines:SSL23_GET_SERVER_HELLO:reason(1000)無法建立
SSL 連接。

到這里我懷疑是openssl安裝有問題,更新到最新版本後還是一樣,然後在瀏覽器里訪問是可以的,所以應該不是openssl有問題。繼續google.......,就發現有人也遇到過這種問題,說是連接SSL伺服器時SSL的版本不對,如是用如下代碼測試不同的SSL版本,看是不是這個問題:
?

12345

curl
-1 https://xxx.com curl
-2 https://xxx.com curl
-3 https://xxx.com

分別用上面的三句腳本去測試連接情況,發現第三種可以連接正常(-1,2,3,數字分別代碼tlsv1,sslv2,sslv3三個不同的SSL版本)。說明這個https連接所在的伺服器是基於SSLV3版本的。找到的問題,就很容易知道怎麼改寫python代碼了。
?

123456789

class MyAdapter(HTTPAdapter): def init_poolmanager(self,
connections, maxsize): self.poolmanager= PoolManager(num_pools=connections, maxsize=maxsize, ssl_version=ssl.PROTOCOL_SSLv3) s= requests.Session()s.mount('https://',
MyAdapter())#所有的https連接都用ssl.PROTOCOL_SSLV3去連接s.get('https://xxx.com')

urllib2實現:
?#
custom HTTPS opener, banner's oracle 10g server supports SSLv3 onlyimport httplib,
ssl, urllib2, socketclass HTTPSConnectionV3(httplib.HTTPSConnection): def __init__(self,*args,**kwargs): httplib.HTTPSConnection.__init__(self,*args,**kwargs) def connect(self): sock= socket.create_connection((self.host,self.port),self.timeout) if self._tunnel_host: self.sock= sock self._tunnel() try: self.sock= ssl.wrap_socket(sock,self.key_file,self.cert_file,
ssl_version=ssl.PROTOCOL_SSLv3) except ssl.SSLError,
e: print("Trying
SSLv3.") self.sock= ssl.wrap_socket(sock,self.key_file,self.cert_file,
ssl_version=ssl.PROTOCOL_SSLv23) class HTTPSHandlerV3(urllib2.HTTPSHandler): def https_open(self,
req): return self.do_open(HTTPSConnectionV3,
req)#
install openerurllib2.install_opener(urllib2.build_opener(HTTPSHandlerV3())) if __name__== "__main__": r= urllib2.urlopen("htANPROD1/bwskfcls.P_GetCrse") print(r.read())

可以看到這兩種方案的原理都是一樣,就是自定義連接處理器,改變連接時ssl的版本號。

⑼ 如何驗證在Python SSL證書

最簡單的方式是使用python調用openssl命令來驗證

import os

os.system('openssl verify -CAfile ../ca-cert.pem bob.cert')
如果解決了您的問題請採納!
如果未解決請繼續追問!

⑽ Python爬取登錄界面,SSL 證書錯誤,如圖,這個這怎麼解決,請給出具體解決方案,謝謝

SSL證書,通常原因:使用非信任證書或非安全機構簽發的證書,證書沒有CA根服務不被信任,解決辦法登陸簽發機構辦法信任證書,重新安裝或者替換之前的證書就可以了:網頁鏈接

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:427
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:552
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:738
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:531
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:141
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:227
java駝峰 發布:2025-02-02 09:13:26 瀏覽:646
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:527
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:206
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:721