我在我的开发网站上使用cakePHP(http://code.42dh.com/openid/)设置了一个基本的openID系统:http://dev.cyclistsroadmap.com/users/login(原谅调试输出)。它适用于myopenID,但不适用于yahoo(flickr图标)
它返回一个标识网址,但坚持“OpenID验证失败:在https://me.yahoo.com/a/找不到OpenID信息....”并且根本不适用于谷歌。
它适用于myopenID的事实让我相信我已经正确设置了东西。关于为什么雅虎失败的原因,任何线索都要回归?
编辑:似乎PHP可能无法执行SSL,是否可能导致Yahoo失败?答案 0 :(得分:4)
我最近一直走在这条完全相同的道路上,花了一段时间才弄明白。看看你的PHP错误日志,对我来说是MAMP/logs/php_error.log
。你可能会发现以下几点:
Got no response code when fetching https://www.google.com/accounts/o8/ud
CURL error (60): SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
这可能是本地PHP / OpenSSL安装中的问题。解决此问题的最简单方法是在捆绑的Yadis ParanoidHTTPFetcher中禁用SSL验证:
Index: /app/vendors/Auth/Yadis/ParanoidHTTPFetcher.php
===================================================================
--- a/app/vendors/Auth/Yadis/ParanoidHTTPFetcher.php
+++ b/app/vendors/Auth/Yadis/ParanoidHTTPFetcher.php
@@ -131,7 +131,9 @@
if (defined('Auth_OpenID_VERIFY_HOST')) {
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2);
+ } else {
+ curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
}
curl_exec($c);
$code = curl_getinfo($c, CURLINFO_HTTP_CODE);
@@ -204,6 +206,8 @@
if (defined('Auth_OpenID_VERIFY_HOST')) {
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2);
+ } else {
+ curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
}
curl_exec($c);
要在生产系统上启用 SSL主机验证,请在core.php
中添加以下内容:
if (!Configure::read('debug')) {
define('Auth_OpenID_VERIFY_HOST', true);
}