2013-03-22 33 views
0

我正在写一个带有webrick和ssl支持的MITM代理(用于在客户端嘲笑带有VCR的请求,请参阅此线程VCRProxy: Record PhantomJS ajax calls with VCR inside Capybara或我的github存储库https://github.com/23tux/vcr_proxy),并且我认为它很远(在我看来) 。我的配置是phantomjs被配置为使用代理并忽略ssl错误。该代理(用webrick编写)用VCR记录正常的HTTP请求。如果发出SSL请求,代理将启动另一个webrick服务器,将其挂载到/,并为请求重写unparsed_uri,以便不调用原始服务器,而是调用我刚刚启动的webrick服务器。新开始的服务器处理请求,用VCR记录它,等等。WEBrick套接字返回eof? == true

使用cURL测试MITM代理时,一切正常。例如请求由卷曲做出像

curl --proxy localhost:11111 --ssl --insecure https://blekko.com/ws/?q=rails+/json -v 

得到处理,记录...

但是:当我尝试做的骚灵从JavaScript与JSONP Ajax请求提供的页面内相同的请求,东西出错。我将其调试到导致问题的线路。这是httpserver.rb从Ruby源代码中的WEBrick内的line 80(红宝石1.9.3):

def run(sock) 
    while true 
    res = HTTPResponse.new(@config) 
    req = HTTPRequest.new(@config) 
    server = self 
    begin 
     timeout = @config[:RequestTimeout] 
     while timeout > 0 
     break if IO.select([sock], nil, nil, 0.5) 
     timeout = 0 if @status != :Running 
     timeout -= 0.5 
     end 
     raise HTTPStatus::EOFError if timeout <= 0 
     raise HTTPStatus::EOFError if sock.eof? 

最后一行raise HTTPStatus::EOFError if sock.eof?提高做与phantomjs请求时的错误,因为sock.eof? == true

1.9.3p392 :002 > sock 
=> #<OpenSSL::SSL::SSLSocket:0x007fa36885e090> 
1.9.3p392 :003 > sock.eof? 
=> true 

我试过用curl命令,那里是sock.eof? == false,所以错误没有得到提高,并且一切正常:

1.9.3p392 :001 > sock 
=> #<OpenSSL::SSL::SSLSocket:0x007fa36b7156b8> 
1.9.3p392 :002 > sock.eof? 
=> false 

我只有很少的红宝石套接字编程的经验,所以我有点陷入困境。

我怎样才能找出,基于sock变量的两个请求之间有什么区别?正如我在红宝石IO文档中看到的那样,eof?阻塞,直到对方发送一些数据或关闭它。我对吗?但是为什么在调用相同的请求,相同的参数,与phantomjs相同的方法时它关闭,并且在使用curl时没有关闭?

希望有人能帮我弄清楚这一点。谢谢!

回答

1

由于这是一个HTTPS,我敢打赌,客户端正在关闭连接。在HTTPS中,当服务器证书例如无效时可能发生这种情况。你使用什么样的HTTPS库?通常可以将这些库配置为忽略SSL CERT,并在其无效时继续工作。

在curl中,你实际上正在使用-k(--insecure)来做这件事,如果没有它,它将无法工作。尝试这个没有这个选项,如果curl失败,那么你的服务器证书是无效的。请注意,为了实现这一目标,您通常需要关闭检查或向客户端提供有效的证书,以便验证它。

+0

Thx为您的答案!我使用webrick自动生成的自签名证书,但我配置了phantomjs以使用'--ignore-ssl-errors = true'。我认为这会忽略ssl错误。自签名证书总是无效的,不是吗?有没有办法通过webrick提供适当的证书? – 23tux 2013-03-22 10:50:19

+0

我重新安装了phantomjs,现在一切正常。奇怪,但thx为您的支持! – 23tux 2013-03-22 14:03:37