小编Sam*_*fox的帖子

为什么Ruby无法验证SSL证书?

这是我第一次尝试使用XMLRPC :: Client库与远程API进行交互,并且我一直收到此错误:

warning: peer certificate won't be verified in this SSL session
Run Code Online (Sandbox Code Playgroud)

搜索周围我发现有很多人犯了这个错误.通常它是自签名证书,他们只是想让它消失,所以他们像MonkeyRPC :: Client打开它的http会话一样做了像Monkey patch那样的脏东西.

我首先假设这只是客户不关心证书是否有效,所以我继续我的搜索并遇到了这个宝石.它只是强制验证所有SSL证书,如果它也不能,则会引发硬错误.这正是我想要的.我把它包括在内,再​​次运行代码,现在我得到了这个:

OpenSSL:SSL::SSLError:
  SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B:
  certificate verify failed
Run Code Online (Sandbox Code Playgroud)

当然!证书很糟糕!但我仔细检查以确保使用openssl的内置s_client,如下所示:

openssl s_client -connect sub.example.com:443
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

CONNECTED(00000003)
---
Certificate chain
<snip>
Verify return code: 0 (ok)
Run Code Online (Sandbox Code Playgroud)

所以现在我们回答我的问题.OpenSSL(命令行版本)说证书很好.OpenSSL(Ruby库)不同意.我的所有网络浏览器都说证书很好.

一些可能有用的其他细节.证书是通配符,但对域有效.openssl s_client在距离Ruby代码几秒钟的同一台机器上运行.这是与Windows一起安装的Ruby 1.8.7 p357.

Ruby是否使用主机操作系统提供的CA捆绑以外的东西?有没有办法告诉Ruby使用特定的CA捆绑或系统?

ruby api openssl certificate

54
推荐指数
1
解决办法
3万
查看次数

标签 统计

api ×1

certificate ×1

openssl ×1

ruby ×1