Forum: Rails-ES conexion con socket seguro SSL

B556847a906d7de134f0e7c65b1a0fb4?d=identicon&s=25 Juan Lopez (juannelosoft)
on 2013-06-26 18:23
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.
B556847a906d7de134f0e7c65b1a0fb4?d=identicon&s=25 Juan Lopez (juannelosoft)
on 2013-06-26 23:36
Esta falla la solucione cambiando la forma de leer con esto:

temp = client.gets   =>   temp = client.readline
linea = ssl_socket.gets   =>   linea = ssl_socket.readline

por alguna extraña razon este si lee y el anterior no.
This topic is locked and can not be replied to.