Как установить соединение TCP/IP с поддержкой SSL в Ruby
Мне нужно установить 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 и получить ответ.
Пожалуйста помоги.
2 ответа
Решение
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
Как это:
sock = TCPSocket.new('hostname', 443)
ctx = OpenSSL::SSL::SSLContext.new
ctx.set_params(verify_mode: OpenSSL::SSL::VERIFY_PEER)
@socket = OpenSSL::SSL::SSLSocket.new(sock, ctx).tap do |socket|
socket.sync_close = true
socket.connect
end