https-сервер.Ruby. не могу принять запрос

Модератор: Модераторы разделов

Аватара пользователя
LuckyStr
Сообщения: 159
ОС: Fedora

https-сервер.Ruby. не могу принять запрос

Сообщение LuckyStr »

есть готовый http-сервер, хочу превратить его в https. для этого решил сделать такой примерчик, чтобы понять как превращать:

Код: Выделить всё

require "openssl"
require 'socket'

port = 443
ctx = OpenSSL::SSL::SSLContext.new()
ctx.ciphers = "ADH"
tcps = TCPServer.new(port)
ssls = OpenSSL::SSL::SSLServer.new(tcps, ctx)

while (session = ssls.accept) # 8-ая строка
  puts session.gets
  session.puts Time.new
  session.close
end


но происходит какая-то фигня. ввожу в браузере 127.0.0.1:443 и наблюдаю в консоли

bash:

Код: Выделить всё

 [root@COR rubyserv]# ./rubyserv.rb
 /usr/lib/ruby/1.8/openssl/ssl.rb:122:in `accept': http request
 (OpenSSL::SSL::SSLError)
  from /usr/lib/ruby/1.8/openssl/ssl.rb:122:in `accept'
  from ./rubyserv.rb:8


что я делаю не так?
Это наш химический дом для печальных жителей Земли!
Спасибо сказали:
MakkyWelly
Сообщения: 97
ОС: по обстоятельствам :)

Re: https-сервер.Ruby. не могу принять запрос

Сообщение MakkyWelly »

Да вроде всё правильно делаете. Только нужен ssl клиент, ведь браузер шлет запрос GET, а ssl этого не понимает (т.е. понимает "http request", но не знает что делать).

Можно переписать так:

Код: Выделить всё

require 'openssl'
require 'socket'

def worker(req)
## непосредственно интерпретатор запросов, например:
  cmd, arg = req.chomp.split
  case cmd
    when "ls"
      begin
        Dir[ arg || "*" ].map{ |str| str + "\n" }
      rescue
        "# #{cmd}: #{arg.inspect} - Нет такого файла или каталога.\n"
      end
    when ".."
      begin
        Dir.chdir("..")
      rescue
        "\n"
      end
    when "cd"
      begin
        Dir.chdir(arg.inspect)
      rescue
        "# #{cmd}: #{arg.inspect} - Нет такого файла или каталога.\n"
      end
    when "mkdir"
      begin
        Dir.mkdir(arg.inspect)
      rescue
        "# #{cmd}: #{arg.inspect} - не удаётся создать каталог.\n"
      end
    when "rmdir"
      begin
        Dir.rmdir(arg.inspect)
      rescue
        "# #{cmd}: #{arg.inspect} - не удаётся удалить каталог.\n"
      end
#     и вообще:
#     when "что-то"
#       begin
#         функция(arg.inspect)
#       rescue
#         "ошибка при аргументах: #{arg.inspect}\n--> "
#       end
    when "exit"
      "Bye.\n"
      session.close
      break
    else
      "# #{cmd}: команда не найдена.\n"
  end
end

context          = OpenSSL::SSL::SSLContext.new()
context.ciphers  = "ADH"
port             = 7777

TCPServer.open(port) { |tcp_socket|
  ssl_server = OpenSSL::SSL::SSLServer.new(tcp_socket, context)
  if (session = ssl_server.accept)
    session.print "Greating! This is our SSL, securrrrrity!\n"
    loop {
      session.puts worker(session.gets)
    }
  end
}


потом запускаем на одном терминале, а на другом терминале:

Shell

$ openssl s_client -cipher ADH -port 7777 CONNECTED(00000004) --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 419 bytes and written 262 bytes --- New, TLSv1/SSLv3, Cipher is ADH-AES256-SHA Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1 Cipher : ADH-AES256-SHA Session-ID: F312D33B1D84DC91A4AE2B9CC8183515FDC6A651DAAE60BEC8C667ACBE9F0B0F Session-ID-ctx: Master-Key: 5493556892D53A14360E4F118BEED6F71523627195B2E34903298353098CEC76 Key-Arg : None Start Time: 1250580397 Timeout : 300 (sec) Verify return code: 0 (ok) --- Greating! This is our SSL, securrrrrity! ls [...] .. ls [...] cd / ls [...] su # su: команда не найдена.\n" exit read: 0001 (exit)



Предполагается, что сниффер должен видеть бред, но я не проверял.
die sheep! die to reverse the system
you accept (reject, respect);
next step,
kill next sacrifice, each sacrifice
Спасибо сказали:
Аватара пользователя
Subj
Сообщения: 151
Статус: Useful
ОС: win

Re: https-сервер.Ruby. не могу принять запрос

Сообщение Subj »

Мож эта, в браузере вбить https://127.0.0.1/ ? :)
Building better software with Ada
Спасибо сказали:
MakkyWelly
Сообщения: 97
ОС: по обстоятельствам :)

Re: https-сервер.Ruby. не могу принять запрос

Сообщение MakkyWelly »

(Subj) писал(а):Мож эта, в браузере вбить https://127.0.0.1/ ?

И он тогда законектится на 80 порт. А у ssl по умолчанию емнип 443.(букво не разглядел)

А!

https - нужно попробывать. Т.е. браузер может быть таким клиентом.
die sheep! die to reverse the system
you accept (reject, respect);
next step,
kill next sacrifice, each sacrifice
Спасибо сказали: