这是我第一次尝试使用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捆绑或系统?