Да вроде всё правильно делаете. Только нужен 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