2011-01-24 168 views
4

對於OpenID智能模式,該規範使用Diffie-Hellman密鑰交換。我想知道公鑰和私鑰是否可以重用(假設它們沒有被入侵),或者是否應該爲每個請求生成它們。我使用PHP的OpenSSL庫(我的代碼:$key = openssl_pkey_new(array('private_key_type' => OPENSSL_KEYTYPE_DH));)來生成密鑰,並且速度非常慢(生成密鑰的平均時間爲22秒 - 對於網站來說非常不可接受)。如果密鑰不能被重用,有什麼更快的方法可以使用OpenSSL生成密鑰?我寧願不要手動執行,因爲依賴數學庫等實施OpenID客戶詳細信息

編輯:爲了清楚,我在尋找答案中的兩件事:我可以在OpenID關聯模式中重用Diffie-Hellman密鑰,如果不是,那麼使用OpenSSL生成密鑰的方法比openssl_pkey_new()更快,因爲這需要很長時間。

+1

WOW,你爲什麼不使用OpenID庫,而不是自己做OpenID交易? – timdream 2011-01-24 04:21:07

+1

因爲a)沒有滿足我的需求和b)我不喜歡使用我不明白的東西。 JanRain庫的設計非常可怕,並且在我的設置中加載速度很慢 - 更不用說它不支持PHP 5.3.5(我不會妥協)。 LightOpenID在整個地方使用preg而不是正確的XML DOM方法,這讓我感到不知所措(更不用說_still_不支持智能模式身份驗證)。沒有支持PHP 5.3.5和智能模式身份驗證的庫。 – 2011-01-24 04:40:07

+0

關於Zend Framework OpenID有什麼疑問? http://framework.zend.com/manual/en/zend.openid.consumer.html – Marc 2011-01-31 23:24:19

回答

1

Jeff,

我想首先支持您自己構建此解決方案的決定。我同意其他解決方案(在很大程度上)在幾個領域都很薄弱。我還沒有完全轉換到PHP 5.3.5,但將繼續前進。

不管怎樣,有幾個回答您的問題:

  1. 是的,只要你能保證私人&公共密鑰不會受到損害,則沒再使用它們。但我自己總是對此有點偏執,所以我使用cron作業來每天晚上重新生成密鑰,然後使用會話跟蹤來確保我沒有在舊密鑰下啓動並在新密鑰下完成的事務。這個額外的步驟(每24小時再生一次)是不必要的,但可能有助於減輕您的後顧之憂。

  2. 不,它不應該需要22秒來生成新的密鑰。我的服務器需要3-5秒的時間才能創建(我仍然覺得它太長了,因此當用戶沒有受到影響/等待時,cron工作就在旁邊)。您可能需要查看日誌以查看是否存在可能是你的openssl.cnf或服務器中的某些配置有問題,我想如果你的服務器因爲資源而被過度佔用或者你的處理器速度非常慢,那麼可能需要很長時間,你可以檢查運行的是什麼在後臺...也許有些失控的無限循環佔用你的處理器和內存?是重新啓動的選項?

祝你好運!

1

OpenID的智能模式

這是什麼OpenID的智能模式? 如果你談論的不是消費的OpenID,我想你可以停止閱讀(雖然我不認爲你應該創建另一個OpenID的提供商做的。夠了他們的話)


。 我從來沒有讀過openid規範(長/複雜的閱讀:$。我想讀/學習它),但是當它需要21秒做OpenID身份驗證(?)。那麼我認爲你做錯了什麼。 LightOpenID(真正簡單的庫)庫(消費者)在瞬間完成OpenID認證。我創建了this library which wraps LightOpenID+openid selector。您可以在my hosting上看到託管演示。