当您需要首先通过纯文本进行通信时,如何在Ruby中使用SSL保护套接字?
我无法使用,OpenSSL::SSL::SSLServer因为客户有责任首先请求SSL连接
长话短说,我试图实现RFC3207,客户端发送关键字"STARTTLS",然后创建SSL连接.
我的问题是"如何在服务器发送'220 OK'后创建SSL连接?"
我知道我可以OpenSSL::SSL::SSLSocket在客户端使用,但我不知道在服务器端做什么
如果您知道如何使用Ruby以外的语言执行此操作,只需发布代码并将其翻译,我已经处理了大约8个小时,我需要我能得到的一切
我在#ruby-lang中问过,但是无济于事,我曾尝试在服务器和客户端的SSLSockets中同时包装Socket对象,但这也无效
简而言之,我非常困难,我需要得到所有帮助
我创建这个要点是为了说明如何设置最小的 TLS 服务器。您可能需要省略第 62-67 行,它是为了说明 trunk 上的一个新功能。
但除此之外,它是一个功能齐全的 TLS 服务器,您可以在其基础上添加更多功能。
如果你想认真使用它,你可能还想将服务器证书的 CN 从“localhost”更改为真实域:)
您可能会注意到,工作的最大部分实际上是正确设置 PKI 方面。核心服务器部分是这样的:
ctx = OpenSSL::SSL::SSLContext.new
ctx.cert = ... # the server certificate
ctx.key = ... # the key associated with this certificate
ctx.ssl_version = :SSLv23
tcps = TCPServer.new('127.0.0.1', 8443)
ssls = OpenSSL::SSL::SSLServer.new(tcps, ctx)
ssls.start_immediately = true
begin
loop do
ssl = ssls.accept
puts "Connected"
begin
while line = ssl.gets
puts "Client says: #{line}"
ssl.write(line) # simple echo, do something more useful here
end
ensure
ssl.close
end
end
ensure
tcps.close if tcps
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2554 次 |
| 最近记录: |