Ruby#SSLを利用したサーバーとクライアント


文字を大文字にするサーバー

server.rb
require 'socket'
require 'openssl'

include OpenSSL

ctx = SSL::SSLContext.new()
ctx.cert = X509::Certificate.new(File.read('server-cert.pem'))
ctx.key = PKey::RSA.new(File.read('server-key.pem'))
svr = TCPServer.new(4443)
serv = SSL::SSLServer.new(svr, ctx)

socket = serv.accept
text = socket.gets
socket.puts(text.upcase)

"hello"を送るだけのクライアント

client.rb
require 'socket'
require 'openssl'

include OpenSSL

soc = TCPSocket.new('localhost', 4443)
socket = SSL::SSLSocket.new(soc)
socket.connect

socket.puts("hello")
puts socket.gets

サーバー起動

$ ruby server.rb

クライアント実行

$ ruby client.rb
HELLO # helloが大文字になって帰って来ます

おまけ: 秘密鍵とかを作るコマンド

$ openssl genrsa -out server-key.pem 1024
$ openssl req -new -key server-key.pem -out server-csr.pem
$ openssl x509 -req -in server-csr.pem -signkey server-key.pem -out server-cert.pem