gpt4 book ai didi

ruby-on-rails - Ruby SSL 握手未收到服务器 Hello 返回 - 使用代理 Net::HTTP

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:25 26 4
gpt4 key购买 nike

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

我最新的脚本在这里:

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 state

而不是我之前两个问题中的旧问题

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

 # /Users/me/projects/proj/lib/tasks/rnif_message_builder.rake:217:in `block (2 levels) in <top (required)>'

这是我最新的wireshark

wireshark

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

到目前为止我一直在努力

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

但是我对openssl s_client的使用不是很熟悉

如果您能提供任何对此问题进行故障排除的帮助,我们将不胜感激!

更新

非常感谢您迄今为止的帮助。我正在试验您发送给我的那些命令,并试图查看我可以从它们那里获得哪些信息来帮助我解决这个问题。目前,在他们更改了我的 IP 地址并允许我通过防火墙后,我得到了这个

 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)>'

最佳答案

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

$ 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 挂起时,跳转到另一个终端并发出:

$ sudo netstat -a | grep openssl
$

Netstat 不会向您显示 SYN_SEND 状态,因此请使用 tcptrack:

$ 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。可能有几个原因,但是......

鉴于目标,您似乎遇到了防火墙。它不是拒绝连接,而是丢弃连接。它有时被称为“隐身模式”;它使机器上看起来没有服务器在运行。这与 OpenSSL 的 connect: Connection timed out 消息一致。

问题可能出在代理上。您确实想从那里运行测试,但您可能做不到。可能是您正在使用远程站点指定的密码、协议(protocol)和端口;但代理正在做自己的事情。另见 Jarmock 的 SSL Interception Proxies and Transitive Trust .

这里有一些引用资料:

关于ruby-on-rails - Ruby SSL 握手未收到服务器 Hello 返回 - 使用代理 Net::HTTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41924902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com