Ruby on rails Ruby SSL握手未接收服务器Hello back-使用代理网络::HTTP
我正在使用Ruby SSL双向身份验证连接到外部API 我的最新剧本如下:Ruby on rails Ruby SSL握手未接收服务器Hello back-使用代理网络::HTTP,ruby-on-rails,ruby,ssl,openssl,net-http,Ruby On Rails,Ruby,Ssl,Openssl,Net Http,我正在使用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 = F
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\u connect SYSCALL返回=5 errno=0 state=unknown state
而不是我前面两个问题中的老问题
OpenSSL::SSL::SSLError:SSL\u connect SYSCALL返回=5 errno=0 state=SSLv3读取服务器hello A
这通常会连接到几乎所有的服务器。它使用TLS1.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
Netstat不会向您显示SYN\u 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
$sudo tcptrack-i eth0
#
172.16.2.4:43302 208.38.22.37:443同步发送15s 0 B/s
您处于TCP的等待计时器中。对方没有与你进行三方握手。事实上,他们没有确认您的SYN
。可能有一些原因,但是
给定目标,看起来您遇到了防火墙。它不是拒绝连接,而是删除连接。它有时被称为“隐形模式”;这使得机器上似乎没有运行服务器。这与OpenSSL的connect:Connection timed out
消息一致
问题可能出在代理上。您确实希望从那里运行测试,但可能无法运行。可能是您正在使用远程站点指定的密码、协议和端口;但代理在做自己的事情。也可以看Jarmock的
以下是一些参考资料:
- 在Wireshark维基上
$ openssl s_client -connect xml.digitaloilfield.com:443 -tls1_2 \
-servername xml.digitaloilfield.com -debug
<hang>
connect: Connection timed out
connect:errno=110
Netstat不会向您显示SYN\u 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
$sudo tcptrack-i eth0
#
172.16.2.4:43302 208.38.22.37:443同步发送15s 0 B/s
您处于TCP的等待计时器中。对方没有与你进行三方握手。事实上,他们没有确认您的SYN
。可能有一些原因,但是
给定目标,看起来您遇到了防火墙。它不是拒绝连接,而是删除连接。它有时被称为“隐形模式”;这使得机器上似乎没有运行服务器。这与OpenSSL的connect:Connection timed out
消息一致
问题可能出在代理上。您确实希望从那里运行测试,但可能无法运行。可能是您正在使用远程站点指定的密码、协议和端口;但代理在做自己的事情。也可以看Jarmock的
以下是一些参考资料:
- 在Wireshark维基上
s_客户端一起使用的好例子:。这是一个将客户端证书与s_客户端一起使用的好例子:。
$ sudo tcptrack -i eth0
# <next, use s_client>
172.16.2.4:43302 208.38.22.37:443 SYN_SENT 15s 0 B/s