2012-02-01 55 views
6

客戶端和服務器都是內部的,每個客戶端都有一個由內部CA和CA證書籤名的證書。我需要客戶端根據它擁有的CA證書來驗證服務器的證書。它還應該將其證書發送到服務器進行身份驗證。如何在沒有(L)GPL庫的情況下在Python中創建雙重身份驗證HTTPS客戶端?

urllib2手冊說沒有執行服務器驗證。 PycURL是一種天然替代品,但其許可證尚未獲得批准。我也不希望從源代碼編譯庫,而是使用RPM代替。

我去了一幫庫像請求httplib2的並沒有看到我需要什麼。也有ssl模塊,但我不覺得自己實施http,如果我不是絕對必須的。

的Python 2.6 RHEL 5.7

+0

我面對的幾乎類似的問題,我的解決它讓Apache做所有的SSL提升 – 2012-02-01 12:30:52

+0

@Mikko - 我的問題是在客戶端,一個Python實用工具 – davka 2012-02-01 13:57:52

+0

啊哈。對不起,沒有得到第一次:( – 2012-02-01 14:22:22

回答

6

好吧,贏家(差不多)是httplib2 v0.7。從此版本開始,它支持SSL證書認證。這裏的示例代碼

import httplib2 
client = httplib2.Http(ca_certs='ca.crt') 
client.add_certificate(key='client_private_key.pem', cert='cert_client.pem', domain='') 
headers, resp = client.request(query) 

注意domain=''參數,否則它不適用於我。

PS。不幸的是,這個簡單的解決方案並不適合我,因爲我忘了提到額外的要求 - 爲RHEL 5.7 & Python 2.6安裝RPM。

+1

我希望我可以upvote這個答案更多我試過python請求,urllib3都沒有成功,但這個工程!新的收藏圖書館。 – Komu 2014-11-28 10:10:55

3

Twisted Python是,可能你需要什麼,儘管我不知道,如果MIT許可證適合你想要的庫。 GPL是一個非常具體的許可證,希望你不是指「所有開源許可證」。

對於SSL示例,請參見http://twistedmatrix.com/documents/current/core/howto/ssl.html。根據您的描述,該頁面上的最後幾個示例尤其相關。 Twisted使用PyOpenSSLdocs),它已獲得Apache許可。你也可以考慮直接使用PyOpenSSL。

+0

謝謝。它看起來很有趣,但對我來說似乎是一個矯枉過正的 - 我需要一個簡單的請求和響應,所以在這種情況下,使用反應堆將過度工程 – davka 2012-02-02 09:14:04

+0

也許。感覺這個框架在一個塊中太多了,請使用PyOpenSSL庫(上面的鏈接)並手動完成。我想你會發現在任何情況下努力程度都是相似的。 – gfortune 2012-02-02 20:56:36

+0

我打算嘗試'httplib2'看起來合適和簡單,我會在這裏更新它是怎麼回事 – davka 2012-02-05 08:58:45

2

更新:如果requests之前並不支持客戶端證書,it supports it now,提供的本地證書的私鑰(如果有的話)是未加密:

>>> requests.get('https://FOO.BAR.BAZ/', cert=('/path/client.cert', '/path/client.key')) 
<Response [200]> 
相關問題