Hola amigos,
Estoy intentando establecer una comunicación SSL usando sockets seguros,
el problema que tengo es que cuando el cliente le manda el mensaje al
servidor, el servidor acepta la conexión pero al momento de leer no hace
nada, si el cliente termina esa conexión, entonces el servidor ya
obtiene todo el mensaje, esto no me es útil ya que necesito que responda
a ese mismo cliente el mensaje.
El código del servidor es este:
ctx = OpenSSL::SSL::SSLContext.new
ctx.cert = OpenSSL::X509::Certificate.new(File.open(“CERT_CRT.crt”))
ctx.key = OpenSSL::PKey::RSA.new(File.open(“CERT_KEY.key”))
ctx.ssl_version = :SSLv23
server = TCPServer.new(puerto)
socket = OpenSSL::SSL::SSLServer.new(server, ctx)
socket.start_immediately = true
loop{
Thread.start(socket.accept) do |client|
valor = ''
while(temp = client.gets) # aqui se queda sin hacer nada
valor = valor + temp
end
puts valor
client.puts("Mensaje recibido")
client.close
end
}
El código del cliente es el siguiente:
ssl_context = OpenSSL::SSL::SSLContext.new()
ssl_context.cert =
OpenSSL::X509::Certificate.new(File.open(“CERT_CRT.crt”))
ssl_context.key = OpenSSL::PKey::RSA.new(File.open(“CERT_KEY.key”))
ssl_context.ssl_version = :SSLv23
s = TCPSocket.open(sitio, puerto)
ssl_socket = OpenSSL::SSL::SSLSocket.new(s, ssl_context)
ssl_socket.sync_close = true
ssl_socket.connect
ssl_socket.puts(valor) # aqui mando el mensaje
respuesta = ‘’
while(linea = ssl_socket.gets) # cliente se espera recibir el mensaje
respuesta = line.chop
end
puts respuesta
ssl_socket.close
Cuando termino el cliente matando su proceso, me e percatado de que el
servidor ya continua con el código y muestra el mensaje completo que el
cliente envío, cuando la conexión la hacia sin SSL todo funcionaba de
maravilla, alguien podría ayudarme con este caso.