如何摆脱 OpenSSL::SSL::SSLError
我正在尝试使用 OmniAuth 对 Facebook 用户进行身份验证。最初,它可以工作,但一路上它停止工作并开始给我这个错误消息:
OpenSSL::SSL::SSLError SSL_connect 返回=1 错误号=0 状态=SSLv3 读取 服务器证书B:证书 验证失败
相同的代码适用于 Twitter,但我似乎无法理解为什么它不适用于 Facebook。我在网上寻求帮助,但没有成功。
这是我正在构建的网站的链接:http://www.bestizz.com/
这个网址会给你错误消息: http://www.bestizz.com/auth/facebook
I am trying to authenticate users with Facebook using OmniAuth. Initially, it was working, but along the way it just stopped working and started to give me this error message:
OpenSSL::SSL::SSLError SSL_connect
returned=1 errno=0 state=SSLv3 read
server certificate B: certificate
verify failed
The same code works well for Twitter and I can't seem to understand why it doesn't work for Facebook. I have looked online for help, but I haven't been successful.
This is the link to the website I am building: http://www.bestizz.com/
And this url would give you the error message: http://www.bestizz.com/auth/facebook
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
Ruby 找不到任何根证书。这是用于调试目的的选项。将以下代码放在脚本的开头:
Ruby cannot find any root certificates. Here is an option for debugging purposes. Put following code at the begining of your script:
将以下代码添加到 config/initializers/fix_ssl.rb
注意:
许多操作系统已经附带了提供的证书包。
例如,在 Red Hat Enterprise Linux 和 CentOS 中,它安装在:
对于 Ubuntu,其安装位置为:
Add the following code to config/initializers/fix_ssl.rb
Note:
Many operating systems already come with a supplied certificate bundle.
For example in Red Hat Enterprise Linux and CentOS it's installed in:
For Ubuntu its at:
更新在 Yosemite 上运行的 Ruby 后,但在尝试通过 Google 进行身份验证时,我遇到了同样的问题。
接下来:
https://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html
似乎解决了我的问题。为了历史的缘故,我将引用:
最后,我必须运行:
希望这会有所帮助
I've been facing the same problem after updating Ruby running on Yosemite, but while trying to authenticate with Google.
Following this:
https://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html
seemed to solve my problem.For the sake of history I'll quote:
In the end, I had to run:
Hope this helps
Facebook 的 SSL 验证似乎失败了。我不是 OpenSSL 大师,但我认为这应该适合你。
假设您使用的是 OmniAuth 的最新版本(>= 0.2.2,我假设您是)和 Faraday >= 0.6.1 的版本(堆栈跟踪表明您是),您可以通过您的 CA 证书捆绑包的位置。相应地修改 Facebook 的 OmniAuth 设置:
并将
'/etc/ssl/certs'
替换为您的捆绑包的路径。如果您需要一个,我相信此文件将适合您 - 只需将其放入在某个地方,给予它必要的权限,然后将你的应用程序指向它。感谢 Alex Kremer 在 这个 SO 答案 中提供的详细说明。
Looks like SSL verification is failing for Facebook. I'm no OpenSSL master, but I think this should work for you.
Assuming you're using an up-to-date version of OmniAuth (>= 0.2.2, I assume you are) and a version of Faraday >= 0.6.1 (the stack trace says you are), you can pass the location of your CA certificates bundle. Modify your OmniAuth setup for Facebook accordingly:
and replace
'/etc/ssl/certs'
with the path to your bundle. If you need one, I believe this file will work for you--just put it somewhere, give it necessary permissions, and point your app at it.Thanks to Alex Kremer at this SO answer for the detailed instructions.
该链接应该有效。 https://gist.github.com/fnichol/867550 只需按照说明进行操作即可。您需要下载 Rails 安装程序并运行两个命令行函数。
This link should work. https://gist.github.com/fnichol/867550 Just follow the instructions. You will need to download Rails installer and run two command line functions.
这样做,这将摆脱 openssl 的证书错误
Do this, this will get ride of the certificate error with openssl
我刚刚做的一个丑陋的解决方法是覆盖 Net::HTTP 中的类并设置告诉它不验证 ssl 证书的变量:
我这样做是因为我不想破坏 gem 的源代码调用 gem,而 gem 又调用 gem,而 gem 又调用 Net::HTTP。我真的应该回去弄清楚如何推动它查看单独的 cacert.pem 文件。我无法修改服务器的 cacert.pem 文件,否则那将是最佳路线。
An ugly workaround I just did is to override the class in Net::HTTP and set the variable which tells it to not verify ssl certs:
I did it this way because I don't want to muck with the source code of the gem which calls the gem which calls the gem which calls Net::HTTP. I should really go back and figure out how to nudge it to look at a separate cacert.pem file instead. I can't modify the server's cacert.pem file, or that would be the best route.