2011-01-24 103 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上看到托管演示。