php – 实现OpenID消费者详细信息

对于OpenID智能模式,规范使用Diffie-Hellman密钥交换.我想知道公钥和私钥是否可以重用(假设它们没有被泄露),或者是否应该为每个请求生成它们.我正在使用
PHP的OpenSSL库(我的代码:$key = openssl_pkey_new(array(‘private_key_type’=> OPENSSL_KEYTYPE_DH));)来生成密钥,它非常慢(平均22秒生成密钥 – 非常不可接受)对于一个网站).如果密钥无法重用,有没有更快的方法可以使用OpenSSL生成密钥?由于依赖于数学库等,我宁愿不手工完成.

编辑:要清楚,我正在寻找答案中的两件事:我可以在OpenID关联模式下重用Diffie-Hellman密钥,如果没有,是否有更快的方法使用OpenSSL生成密钥而不是openssl_pkey_new(),因为这是花了很长时间.

最佳答案 杰夫,

我想首先支持您自己构建此解决方案的决定.我同意其他解决方案(在大多数情况下)在几个方面都很薄弱.我还没有完全转换到PHP 5.3.5,但是会紧随其后.

无论如何,你的问题有几个答案:

>是的,只要你能确保私人&公钥不会受到损害,您可以重复使用它们.我自己总是对此有点偏执,所以我每天晚上使用cron作业重新生成我的密钥,然后使用会话跟踪来确保我没有在旧密钥下开始并在新密钥下完成的事务.这个额外的步骤(每24小时更新一次)是不必要的,但可能有助于减轻您的后顾之忧.
>不,生成新密钥不需要22秒.我的服务器需要3-5秒来创建这些(我仍然感觉太长了,因此当用户不受影响/等待时,一边是cron作业.你可能想查看你的日志,看看是否有您的openssl.cnf或服务器中的某些配置可能存在问题.我想如果您的服务器因资源过度负担过重或者您的处理器速度非常慢,可能需要很长时间.您可以检查运行的是什么在后台…也许一些失控的无限循环正在占用你的处理器和内存?重启是一个选项吗?

祝好运!

点赞