我想做myopenid做的事 - 一旦你登錄了,你可以點擊一個按鈕來生成你的SSL證書;瀏覽器然後下載這個證書並且存儲它。當您稍後返回到yourid.myopenid.com時,您的瀏覽器可以使用其存儲的證書進行身份驗證,因此您永遠不需要密碼。如何支持SSL客戶端證書身份驗證?
所以我的問題是什麼是需要得到這個工作?我如何生成證書?一旦他們回饋給我,我如何驗證他們?
我的堆棧是使用Passenger的Apache上的Rails,但我不太特別。
我想做myopenid做的事 - 一旦你登錄了,你可以點擊一個按鈕來生成你的SSL證書;瀏覽器然後下載這個證書並且存儲它。當您稍後返回到yourid.myopenid.com時,您的瀏覽器可以使用其存儲的證書進行身份驗證,因此您永遠不需要密碼。如何支持SSL客戶端證書身份驗證?
所以我的問題是什麼是需要得到這個工作?我如何生成證書?一旦他們回饋給我,我如何驗證他們?
我的堆棧是使用Passenger的Apache上的Rails,但我不太特別。
取決於服務器上發現這一點,但最簡單的解決方案,我知道的,使用Apache:
「當這個選項被啓用,客戶端X509證書的主題可分辨名稱(DN)被轉換爲HTTP基本授權用戶名,這意味着標準的Apache認證方法可用於訪問控制。用戶名只是客戶X509證書的主題(可以通過運行OpenSSL的openssl x509命令來確定:openssl x509 -noout -subject -in certificate.crt)。請注意,沒有密碼是從用戶獲得......「
不確定軌,但通常REMOTE_USER環境變量應該以某種方式訪問。
如果要生成證書,則需要導致客戶端生成一個密鑰對,並且至少向您發送公鑰,您可以通過一個Javascript調用,在Firefox中執行此操作,它是crypto.generateCRMFRequest。我猜測其他瀏覽器中也有可用的瀏覽器方法。首先,你需要弄清楚如何在獲得公鑰後發佈證書
你可以在服務器上編寫腳本使用OpenSSL,但它內置了對CSR的支持,而不是Firefox將向您發送的CRMF格式。因此,您需要編寫一些代碼將CRMF轉換爲CSR,這需要某種DER處理能力。我只是在這裏摸索表面—操作CA,即使是玩具應用,也不是微不足道的。
像OpenId和PKI解決方案這樣的SSO解決方案確實有重疊,並且在PKI中有一種優雅。但是魔鬼正在細節中,這種方法長期存在的原因有很多,但在政府和軍事應用中才有所發展。
如果您有興趣追求此目標,請跟進一些特定於您希望開發CA服務的平臺的問題。
我一直在解決這個問題。我想做同樣的事情,我知道很多其他網站所有者都希望使用此功能,無論是否有第三方提供商。
我創建了必要的服務器設置和一個firefox插件來處理基於證書的身份驗證。去mypassfree.com搶免費的firefox插件。給我發電子郵件(該頁面上的鏈接)爲服務器設置,因爲我還沒有用一個很好的安裝程序打包它。
服務器設置的Apache2 + OpenSSL的+ Perl的(但是你可以重寫任何語言Perl腳本)
喬納森
您可以生成使用特定瀏覽器的代碼客戶端瀏覽器的證書。請參閱this question
您也可以在Ruby中使用OpenSSL生成SSL客戶端證書服務器端(see this q)。 (這可以在沒有瀏覽器特定代碼的任何瀏覽器中工作,但是您的服務器將生成客戶端的私鑰,這對於加密純粹主義者來說並不理想。)
無論您使用哪種方法生成它們,您都需要配置您的Web服務器以要求客戶端證書。例如,請參閱the Apache docs。
CSR生成(或等效)適用於大多數流行的瀏覽器(IE,FF,Chrome,...),但代碼往往是針對瀏覽器的。看到這個答案:http://stackoverflow.com/a/9198400/372643 – Bruno 2012-10-29 15:12:12
您可以直接使用keygen元素,而不必使用http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#the-keygen-element – hendry 2009-05-26 07:55:20