我正在使用Ruby双向身份验证连接到外部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状态
而不是我前面两个问题中的老问题
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

在我的证书和他们的服务器配置上的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)>'发布于 2017-01-30 14:08:03
这通常会连接到几乎所有的服务器。它使用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。可能有几个原因,但是.
给定目标,您似乎遇到了防火墙。它不是拒绝的‘ing连接,而是 called ’ing connections。它有时被称为“隐形模式”;它使机器上似乎没有服务器运行。这与OpenSSL的connect: Connection timed out消息一致。
问题可能是代理的问题。你真的很想从那里运行测试,但是你可能无法运行。您可能正在使用远程站点指定的密码、协议和端口;但是代理正在做自己的事情。还请参阅Jarmock的SSL侦听代理与传递信任。
以下是一些参考资料:
https://stackoverflow.com/questions/41924902
复制相似问题