2012-03-23 148 views
3

我正在構建一個python應用程序,客戶端將從服務器(也運行python)請求xml頁面。相互SSL身份驗證 - 客戶端和服務器端。 Python - > Django/Twisted/Tornado

我想在木偶配置管理系統上做些事情。木偶工作如下:

1)如果客戶端第一次運行,它會生成一個證書籤名請求和一個私鑰。前者是自簽名的x509證書。
2)客戶端連接到主服務器(此時客戶端未通過認證)併發送CSR,它也會收到CA證書和CRL。
3)主要在本地存儲CSR
4)管理員檢查CSR並最終簽名(通過自動簽名可以自動執行此過程)。我強烈建議在此階段驗證證書指紋。
5)客戶端正在等待他的簽名證書,最終由主人發送。
6)所有下一個通信將使用此客戶端證書。主設備和客戶端都將通過共享相同的CA來驗證對方。
(從http://www.masterzen.fr/2010/11/14/puppet-ssl-explained/

,我不知道該怎麼做的主要事情是:
- 這是最好的庫使用?
- 在服務器端使用什麼?在Apache/nginx後面的Django能夠在第一次運行時簽署證書,然後使用證書進行身份驗證,或者我需要在前端使用類似扭曲的東西?
- 發送CSR的最佳方式是發送到服務器的POST?
- 是否有人知道是否有一些代碼示例可以覆蓋客戶端和服務器端?
- 有沒有其他方法可以在客戶端/服務器之間建立可信連接而無需人工迭代(web服務之間進行身份驗證的最佳實踐是什麼)?

回答

1

圍繞M2Crypto有一個叫做pki的Python包裝器,可以輕鬆創建CSR等。你應該可以使用Django,我沒有看到你需要Twisted的理由。

你也可以用POST發送CSR,是的,那裏沒有任何機密 - 這就是要點。

我鏈接到的pki包有相當徹底的文檔,應該讓你去。

我不認爲你可以建立一個「可信任的連接」,而不需要人爲干涉任何。信任是一種人性化的概念,因此您至少需要批准第一個連接請求,並希望您能驗證試圖連接的人是否真正獲得授權。

注意,在此背景下,「驗證」是指呼叫一個人,並要求他們他們是誰,爲什麼他們正試圖連接到您的服務,並要求他們確認用於CSR的私有密鑰的指紋。

+0

謝謝!我會看看你鏈接的軟件包。關於信任,是的。在獲得CSR後,我們的想法是,負責客戶的人員將登錄並簽署該特定客戶的證書。關於django的用法,我的疑問是,如果我能夠在隨後的請求中檢查證書。 – 2012-03-23 16:28:23

+0

@Leon:您會爲Django編寫身份驗證中間件(在Django代碼庫中有遠程用戶身份驗證的示例,您可以使用SSL證書執行相同操作)。在中間件中,您可以從請求對象獲取證書,然後使用它進行身份驗證。然後,您將看到新客戶可以發送不需要身份驗證的CSR的另一個視圖。 – cha0site 2012-03-23 16:48:52

相關問題