无法通过HTTPS将SOAP客户端(savon)连接到SOAP Web服务

时间:2014-03-26 19:49:56

标签: ruby ssl soap https savon

在尝试解决此问题之前,我不知道证书或SSL是如何工作的,所以请耐心等待我的n00b。

我目前正在使用Savon gem(v.9.9.9)尝试通过HTTPS连接到基于SOAP的Web服务。但是,我很难成功拨打电话。

据我了解SSL / TSL协议,客户端发送初始客户端问候语'消息到服务器,服务器用“服务器问候”响应服务器,其中包括服务器的数字证书。客户端将针对本地证书颁发机构捆绑包检查证书链,以查看是否可以信任所述证书。话虽如此,这是我尝试过的。

  1. 更新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调用。

  2. 检查远程服务器的SSL证书是否有效:我从here了解了openssl CI工具,所以我想也许问题不是&#39我。也许问题在于证书本身。所以我在iTerm中运行了以下命令:

    openssl s_client -connect [HOST]:[PORT] -showcerts
    

    除了证书本身,我在输出中得到以下内容:

    Verify return code: 18 (self signed certificate)
    

    据我了解,由于此证书是自签名的,因此除非它本身是受信任的CA,否则当然无法验证。所以问题不在于证书,问题在于我的本地CA捆绑。

  3. 更新本地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
    
  4. 此时,我并不确定该怎么做,因为据我所知,证书现在应该被视为可信证书。这是我目前的代码:

        $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
    

1 个答案:

答案 0 :(得分:-1)

  

据我了解,由于此证书是自签名的,因此除非它本身是受信任的CA,否则当然无法验证。所以问题不在于证书,问题在于我的本地CA捆绑。

我很困惑你是如何得出这个结论的。自签名证书无法验证,因此证书的问题 。除非自我签名者在那里结束,否则更新您的CA捆绑包将无济于事,这看起来很愚蠢。

尝试关闭验证。

http.auth.ssl.verify_mode = :none