- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在尝试解决这个问题之前,我不知道证书或 SSL 是如何工作的,所以请忍受我的 n00b-ness。
我目前正在使用 Savon gem (v. 0.9.9) 尝试通过 HTTPS 连接到基于 SOAP 的网络服务。但是,我很难成功调用电话。
据我了解 SSL/TSL 协议(protocol),客户端向服务器发送初始的“客户端问候”消息,服务器以“服务器问候”响应,其中包括服务器的数字证书。客户端将根据本地证书颁发机构包检查该证书的链,以查看是否可以信任该证书。话虽如此,这就是我尝试过的方法。
更新 RVM CA 证书:起初,我遇到了此 SO thread 中描述的相同错误,我了解到 Ruby 检查 CA 证书。我还找到了these instructions关于更新 RVM 使用的 CA 证书。所以我在 iTerm 中运行了以下命令:
rvm osx-ssl-certs status all
我得到了以下输出:
Certificates for /Users/user-name/.rvm/usr/ssl/cert.pem: Up to date.
但是,这仍然无法让我通过 HTTP 成功进行 SOAP 调用。
检查远程服务器的 SSL 证书是否有效:我从 here 了解到 openssl CI 工具,所以我想也许问题不在我身上。也许问题出在证书本身。所以我在 iTerm 中运行了以下命令:
openssl s_client -connect [HOST]:[PORT] -showcerts
除了证书本身,我在输出中得到以下内容:
Verify return code: 18 (self signed certificate)
据我了解,既然这个证书是自签名的,那么除非它本身是一个受信任的 CA,否则它当然永远无法被验证。所以问题不在于证书,问题在于我的本地 CA 包。
更新本地 CA 包:据我了解,cert.pem 是受信任的 CA 证书列表。我实际上在我的本地机器上找到了两个这样的文件:
/Users/user-name/.rvm/usr/ssl/cert.pem
和
/System/Library/OpenSSL/cert.pem
我不确定应该更新哪一个,所以我最终将其中一个文件复制到我的应用程序目录中,将证书复制并粘贴到新的本地 cert.pem 中,然后重试。不幸的是,我现在得到以下信息:
OpenSSL::SSL::SSLError:
hostname does not match the server certificate
在这一点上,我不太确定该怎么做,因为据我所知,证书现在应该被视为受信任的证书。这是我目前的代码:
$SOAP_CORE = Savon::Client.new do |wsdl, http|
http.auth.ssl.ca_cert_file = path_to_local_cert.pm
http.auth.ssl.verify_mode = :peer
wsdl.document = path_to_remote_wsdl_over_https
end
最佳答案
As I understand it, since this cert is self-signed, then unless it itself was a trusted CA, then of course it could never be verified. So the issue isn't with the certificate, the problem is with my local CA bundle.
我很困惑你是怎么得出这个结论的。自签名证书不会进行验证,因此问题在于证书。更新您的 CA 包将无济于事,除非自签名者最终在那里,这看起来很愚蠢。
尝试关闭验证。
http.auth.ssl.verify_mode = :none
关于ruby - 无法通过 HTTPS 将 SOAP 客户端 (savon) 连接到 SOAP Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22671608/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!