【问题标题】:How can I determine whether an incoming connection is expecting SSL?如何确定传入连接是否需要 SSL?
【发布时间】:2012-07-06 17:45:09
【问题描述】:

我想为未加密的 TCP 和 SSL 使用 1 个端口。

目标是让 1 个端口成为机器的入口。这意味着将所有协议和传输复用到端口中。例如,我偷看流的前 4 个字节。如果它以“GET”、“POST”、“HEAD”等开头。我知道它是 HTTP 协议,所以我将连接传递给 HTTP 服务器。如果是“HELO”或“EHLO”,我知道将其传递给 SMTP 服务器。

问题是,如果它是 SSL 连接,我应该寻找什么(以便将其传递给 OpenSSL)?

【问题讨论】:

  • 请注意,您的 SMTP 可能会失败。在RFC2821 中,第 4.3.1 节描述了 SMTP 会话的顺序。请注意,服务器首先发言。换句话说,您的系统必须确定它是否是 SMTP客户端说什么之前。
  • @Robᵩ 是的,但我真的无能为力。我只能兼容先说话的系统。
  • 一些像这样工作的系统允许使用 1 个协议,其中服务器通过使用一些超时首先发言(如果客户端在 x 毫秒内没有先发言,则假定它是该协议)。不过,它并不完全可靠。

标签: c++ ssl tcp openssl


【解决方案1】:

SSL 2 将 8x yz(十六进制)作为前两个字节(x yz 可以是任何东西,例如 8F 13),SSL 3 及更高版本将 16 03 十六进制作为前两个字节。

更新:正如 cmets 中所指出的,某些协议要求服务器首先发送一些内容(FTP 和 POP3 仅举几例,并且 SMTP 已在评论中提到),因此您的方法仅适用于有限数量的协议。

【讨论】:

    猜你喜欢
    • 2014-03-22
    • 2017-07-30
    • 2012-06-13
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 2016-08-10
    相关资源
    最近更新 更多