首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby握手未接收服务器Hello使用代理网络::HTTP

Ruby握手未接收服务器Hello使用代理网络::HTTP
EN

Stack Overflow用户
提问于 2017-01-29 19:16:08
回答 1查看 1.3K关注 0票数 1

我正在使用Ruby双向身份验证连接到外部API。

我的最新剧本在这里:

代码语言:javascript
复制
namespace :rnif_message do
  # With Proxy
  task send_test_index: :environment do
  our_cert         = File.read(File.join(Rails.root, 'ssl', 'invoice', 'test', 'cert20190116_ourcert.der'))
  their_test_cert  = File.read(File.join(Rails.root, 'ssl', 'invoice', 'test', 'testcert2016_theircert.der'))


  cert_store = OpenSSL::X509::Store.new
  # Contains their intermediate CA files
  cert_store.add_path File.join(Rails.root, 'ssl', 'invoice', 'test', 'ca')
  cert_store.add_cert  OpenSSL::X509::Certificate.new(their_test_cert)

  uri = URI("https://xml.digital.com/wm.rn/receive")

  proxy_host = "us-static-02.qg.com"
  proxy_port = "port"
  proxy_user = "user"
  proxy_pass = "pass"

  proxy_request = Net::HTTP.new(uri.hostname, '443', proxy_host, proxy_port, proxy_user, proxy_pass)

  proxy_request.verify_mode = OpenSSL::SSL::VERIFY_PEER
  proxy_request.use_ssl = true
  proxy_request.ssl_version = :TLSv1_2
  proxy_request.ciphers = ["AES256-SHA:AES128-SHA:DES-CBC3-SHA"]

  proxy_request.cert = OpenSSL::X509::Certificate.new(our_cert)
  proxy_request.cert_store = cert_store

  post_request = Net::HTTP::Post.new(uri)

  response = proxy_request.request(post_request)
end

响应返回(因为我更新了密码)现在

OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=unknown状态

而不是我前面两个问题中的老问题

OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server hello A

代码语言:javascript
复制
 # /Users/me/projects/proj/lib/tasks/rnif_message_builder.rake:217:in `block (2 levels) in <top (required)>'

这是我最新的wireshark

在我的证书和他们的服务器配置上的IP的初始配置中,我可能给了他们错误的IP地址,所以我可能被他们的防火墙阻塞了。有什么方法可以使用openssl s_client来测试这个呢?

到目前为止我一直在努力

openssl s_client -showcerts -connect xml.digitaloilfield.com:https

但是我不太熟悉openssl s_client的使用。

任何有关故障排除的帮助都将不胜感激!

更新

到目前为止非常感谢你的帮助。我正在试验你发送给我的那些命令,并试着看看我能从他们那里得到什么信息来帮助我。目前,在他们更改了我的IP地址并允许我通过防火墙后,我得到了这个

代码语言:javascript
复制
 EOFError: end of file reached /Users/me/projects/xtiri/xtiri.com/lib/tasks/rnif_message_builder.rake:219:in `block (2 levels) in <top (required)>'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-30 14:08:03

这通常会连接到几乎所有的服务器。它使用TLS 1.2和SNI。这应该建立TCP连接并启动TLS握手。握手以后可能会失败,但那是另一个问题。

代码语言:javascript
复制
$ openssl s_client -connect xml.digitaloilfield.com:443 -tls1_2 \
    -servername xml.digitaloilfield.com -debug
<hang>
connect: Connection timed out
connect:errno=110

然而,当s_client挂起时,跳到另一个终端并发出:

代码语言:javascript
复制
$ sudo netstat -a | grep openssl
$ 

Netstat不显示SYN_SEND状态,所以使用tcptrack

代码语言:javascript
复制
$ sudo tcptrack -i eth0
# <next, use s_client>

172.16.2.4:43302      208.38.22.37:443      SYN_SENT     15s    0 B/s

你在TCP的等待计时器中。对方没有和你进行三方握手。事实上,他们不承认你的SYN。可能有几个原因,但是.

给定目标,您似乎遇到了防火墙。它不是拒绝‘ing连接,而是 called ’ing connections。它有时被称为“隐形模式”;它使机器上似乎没有服务器运行。这与OpenSSL的connect: Connection timed out消息一致。

问题可能是代理的问题。你真的很想从那里运行测试,但是你可能无法运行。您可能正在使用远程站点指定的密码、协议和端口;但是代理正在做自己的事情。还请参阅Jarmock的SSL侦听代理与传递信任

以下是一些参考资料:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41924902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档