OpenSSL错误 - RestClient Gem - Python WSGI

时间:2016-08-12 09:04:09

标签: python ruby ssl wsgi rest-client

问题:

我在SSL问题上苦苦挣扎。我尝试连接到Web应用程序以获取Python应用程序但每次执行请求时都会出现此错误:

RestClient::SSLCertificateNotVerified: SSL_connect returned=1 errno=0 state=error: certificate verify failed:

详情:

  • 我使用RestClient gem (v1.8.0)并尝试简单的GET请求
  • python code to launch the server如下:

    http_server = WSGIServer(('',int(port)),app,log = nylas_logger,                                      handler_class = NylasWSGIHandler,
                                         keyfile =' /vagrant/server.key' ;, certfile =' /vagrant/server.crt')

  • 我在另一台服务器(Nginx Passenger)上的另一个子域使用相同的证书(通配符证书COMODO),我可以成功启动我的请求

我尝试了什么:

  • 我尝试使用Brew
  • 重新安装Openssl
  • 我成功启动了我的请求,将verify_ssl:false标志传递给restclient gem(但我想找到一个不使用此解决方法的解决方案)
  • 我尝试使用--disable-bynary标志重新安装Ruby(我使用RVM)
  • 我发布了rvm osx-ssl-certs update all

最令人惊讶的是,我实际上可以使用相同的证书在另一种类型的服务器上执行请求,因此似乎问题可能出在Python Web服务器上。

1 个答案:

答案 0 :(得分:0)

事实证明gevent.pywsgi服务器没有正确处理SSL证书。 我安装了Nginx并在localhost Python gevent.pywsgi服务器上执行了反向代理,并在Nginx部分进行了SSL处理,并立即工作。

有关信息,我的nginx conf:

server{
        listen 80;
        return 301 https://$host$request_uri;
}

server{
        listen 443;
        server_name subdomain.domain.com;
        ssl on;
        ssl_certificate /etc/nginx/ssl/cert.pem;
        ssl_certificate_key /etc/nginx/ssl/cert.key;

        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proro $scheme;

            proxy_pass http://localhost:5555;
            proxy_read_timeout 90;
            proxy_pass_request_headers on;

            proxy_redirect http://localhost:5555 https://subdomain.domain.com;
        }
}

我限制python服务器只监听localhost请求。