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

标签 php openid

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

编辑:明确地说,我在答案中寻找两件事:我可以在 OpenID 关联模式下重用 Diffie-Hellman key 吗?如果不能,是否有比 openssl_pkey_new 更快的使用 OpenSSL 生成 key 的方法(),因为这需要很长时间。

最佳答案

杰夫,

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

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

  1. 是的,只要您能确保私钥和公钥不被泄露,您就可以重新使用它们。但是我自己对此总是有点偏执,所以我每晚都使用 cron 作业重新生成我的 key ,然后使用 session 跟踪来确保我没有在旧 key 下开始并在新 key 下完成的交易。 . 这个额外的步骤(每 24 小时再生一次)是不必要的,但可能有助于减轻您的后顾之忧。

  2. 不,生成新 key 不应花费 22 秒。我的服务器需要 3-5 秒来创建这些(我仍然觉得太长了,因此当用户不受影响/等待时,cron 作业就在一边。您可能想查看日志以查看是否有有任何警告。您的 openssl.cnf 或服务器中的某些配置可能有问题。我想如果您的服务器对资源过度负担或者您的处理器速度非常慢,可能需要那么长时间。您可以检查正在运行的内容在后台......也许一些失控的无限循环占用了你的处理器和内存?是否可以选择重启?

祝你好运!

关于php - 实现 OpenID 消费者详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4778008/

相关文章:

php - 在mysql中搜索字数统计查询

openid - Google 或 Yahoo OpenID 提供商返回的电子邮件地址是否经过验证?

PHP,PDO,无法让我的 BETWEEN 参数进行注册或准备,获取 0 行

javascript - 在 PHP 中将二进制文件数据转换为 float 据

java - 如何使用 OpenID 检索当前经过身份验证的用户?

nginx - AspNetCore Azure AD Connect 回调 URL 是 http,而不是 https

oauth-2.0 - 如何将 "accounts"的概念添加到Keycloak中?

node.js - 如何在 node-oidc-provider 中重定向失败的登录尝试

php - MySQL 表结构

PHP上传文件增强安全性