将SSL添加到连接

lca*_*ter 6 ruby ssl openssl

当您需要首先通过纯文本进行通信时,如何在Ruby中使用SSL保护套接字?

我无法使用,OpenSSL::SSL::SSLServer因为客户有责任首先请求SSL连接

长话短说,我试图实现RFC3207,客户端发送关键字"STARTTLS",然后创建SSL连接.

我的问题是"如何在服务器发送'220 OK'后创建SSL连接?"

我知道我可以OpenSSL::SSL::SSLSocket在客户端使用,但我不知道在服务器端做什么

如果您知道如何使用Ruby以外的语言执行此操作,只需发布​​代码并将其翻译,我已经处理了大约8个小时,我需要我能得到的一切

我在#ruby-lang中问过,但是无济于事,我曾尝试在服务器和客户端的SSLSockets中同时包装Socket对象,但这也无效

简而言之,我非常困难,我需要得到所有帮助

emb*_*oss 3

我创建这个要点是为了说明如何设置最小的 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)