对于OpenID智能模式,规范使用Diffie-Hellman密钥交换。我想知道公钥和私钥是否可以重用(假设它们没有被泄露),或者是否应该为每个请求生成它们。我正在使用PHP的OpenSSL库(我的代码:$key = openssl_pkey_new(array('private_key_type' => OPENSSL_KEYTYPE_DH));
)生成密钥,而且速度非常慢(生成密钥平均为22秒 - 网站非常不可接受)。如果密钥无法重用,有没有更快的方法可以使用OpenSSL生成密钥?由于依赖于数学库等,我宁愿不手工完成。
编辑:要清楚,我正在寻找答案中的两件事:我可以在OpenID关联模式下重用Diffie-Hellman密钥,如果没有,是否有更快的方法使用OpenSSL生成密钥而不是{{1}因为这需要特别长的时间。
答案 0 :(得分:1)
OpenID智能模式
这个OpenID智能模式是什么? 如果你不是在谈论使用openID,我想你可以停止阅读(虽然我不认为你应该创建另一个OpenID提供者。已经足够了)
。 我从来没有读过openid规范(长/复读:$。我想在某个时候阅读/学习它),但是当需要21秒才能进行OpenID身份验证(?)。然后我觉得你做错了什么。 LightOpenID(真正的简单库)库(消费者)在瞬间执行OpenID身份验证。我创建了this library which wraps LightOpenID+openid selector。您可以在my hosting上看到一个演示。
答案 1 :(得分:1)
杰夫,
我想首先支持您自己构建此解决方案的决定。我同意其他解决方案(在大多数情况下)在几个方面都很薄弱。我还没有完全转换到PHP 5.3.5,但是会紧接着。
无论如何,你的问题有几个答案:
是的,只要你能确保私人&公钥不会受到损害,您可以重复使用它们。我自己总是对此有点偏执,所以我每天晚上使用cron作业重新生成我的密钥,然后使用会话跟踪来确保我没有在旧密钥下开始并在新密钥下完成的事务。这个额外的步骤(每24小时更新一次)是不必要的,但可能有助于减轻您的后顾之忧。
不,生成新密钥不需要22秒。我的服务器需要3-5秒来创建这些(我仍然感觉太长了,因此当用户不受影响/等待时,一边是cron作业。你可能想查看你的日志,看看是否有您的openssl.cnf或服务器中的某些配置可能存在问题。我想如果您的服务器因资源过度负担过重或者您的处理器速度非常慢,可能需要很长时间。您可以检查运行的是什么在后台...也许一些失控的无限循环正在占用你的处理器和内存?重新启动是一个选项吗?