gpt4 book ai didi

ruby - 将 SSL 添加到连接

转载 作者:数据小太阳 更新时间:2023-10-29 07:06:16 26 4
gpt4 key购买 nike

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

我不能使用 OpenSSL::SSL::SSLServer因为首先请求 SSL 连接是客户端的责任

长话短说,我正在尝试实现 RFC3207,其中客户端发送关键字“STARTTLS”,然后创建 SSL 连接。

我的问题是“服务器发送‘220 OK’后如何创建 SSL 连接?”

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

如果你知道如何用 Ruby 以外的语言来做到这一点,只需发布​​代码,我会翻译它,我已经为此工作了大约 8 个小时,我需要我能得到的一切

我在#ruby-lang 中询问过,但无济于事,我尝试同时在服务器和客户端上的 SSLSockets 中包装 Socket 对象,但这也不起作用

简而言之,我很困,我需要我能得到的所有帮助

最佳答案

我创建了这个 gist来说明如何设置最小的 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

关于ruby - 将 SSL 添加到连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10262676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com