Conexion con socket seguro SSL


#1

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.


#2

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.