ruby - 如何在 Ruby 中建立启用 SSL 的 TCP/IP 连接

标签 ruby sockets ssl-certificate tcpclient tcp

我需要与我的服务器建立 TCP 连接,该连接具有我需要访问的启用 SSL 的端口。

我需要发送一个 XML 文件并从服务器获取响应。

在启用 SSL 之前,我能够使用下面提到的代码从服务器获取数据。

require 'socket'
myXML = 'test_xml' 
host = 'myhost.com'   
port = 12482               

socket = TCPSocket.open(host,port)  # Connect to server  
socket.send(myXML, 0)
response = socket.recvfrom(port)
puts response
socket.close

现在我有一个“certi.pfx”,我需要用它建立连接、发送 my_xml 数据并获得响应。如何做到这一点。

我也想知道如果我有 'pem' 和 'key' 文件,我如何建立连接,发送 my_xml 数据并获得响应。

请帮忙。

最佳答案

require 'socket'
require 'openssl'

myXML = 'my_sample_data'
host = 'my_host.com'
port = my_port                

socket = TCPSocket.open(host,port)
ssl_context = OpenSSL::SSL::SSLContext.new()
ssl_context.cert = OpenSSL::X509::Certificate.new(File.open("certificate.crt"))
ssl_context.key = OpenSSL::PKey::RSA.new(File.open("certificate.key"))
ssl_context.ssl_version = :SSLv23
ssl_socket = OpenSSL::SSL::SSLSocket.new(socket, ssl_context)
ssl_socket.sync_close = true
ssl_socket.connect

ssl_socket.puts(myXML)
while line = ssl_socket.gets
  p line
end
ssl_socket.close

关于ruby - 如何在 Ruby 中建立启用 SSL 的 TCP/IP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12836847/

相关文章:

java - 为什么使用 DataOutputStream 将消息写入客户端套接字到服务器套接字仅在关闭客户端套接字后发送?

c++ - C++中的TCP/IP网络通信

python - Twython GET 中的 SSL 错误

java - 如何将服务器证书添加到本地受信任的 Java keystore ?

ruby-on-rails - capistrano 的部署问题

使用线程时,ruby 内存使用量永远增长

Python socket.gethostbyname 函数返回一个 ip 地址,但我无法 ping 它

不可信服务器的SSL证书策略

ruby - 为什么常量在数组内声明,并分配给其他常量,在 Ruby 中作为类常量访问?

ruby - 相当于 Ruby 中的 "continue"