是否存在支持 SSL 的 SOCKS 代理服务器?

Posted

技术标签:

【中文标题】是否存在支持 SSL 的 SOCKS 代理服务器?【英文标题】:Do SOCKS proxy servers exist that have SSL support? 【发布时间】:2016-06-07 20:47:21 【问题描述】:

我遇到了一个开源 SOCKS 客户端库,它支持使用信任管理器密钥连接到 SOCKS 代理来验证远程服务器。

但是,我一直找不到支持此功能的 SOCKS 代理服务器。这些都可以商用吗?

有问题的库是sockslib (Java),它支持这个特定的client example。

一个相关的问题:使用这个特定的库,可以定义 keymanager 密钥(除了 trustmanager 密钥)以及普通凭据。这对 SOCKS 服务器有意义吗?

【问题讨论】:

如果客户端知道它正在连接到需要 SSL 的代理,它可以使用 SSL 连接到代理本身。但是在创建到远程服务器的连接之后,客户端应该直接与服务器创建任何服务器端 SSL 会话,代理只是一个传递。当服务器不知道什么样的客户端连接到它时,我不明白代理验证服务器有什么意义,服务器无法执行两次握手。除非代理正在嗅探客户端和服务器可能相互交换的任何 SSL 握手...... ...但这不是代理的责任,客户端应根据需要验证服务器的身份,反之亦然。 没有 TrustManager 密钥。 @EJP 我检查了,TrustManagers 是一种 Java 机制,用于管理 X.509 公钥证书,以确认服务器的身份。 "...使用信任管理器密钥验证远程服务器。" - 从库的源代码来看:它只是验证与代理的连接,而不是与远程服务器的连接。这是有道理的,因为 socks 代理只是创建了第 4 层隧道,甚至不知道隧道内使用的协议。这意味着它也不知道是否使用了 TLS。 【参考方案1】:

WinGate SOCKS 服务器支持接受连接 (TCP) 并在 SOCKS 协议之前立即对其执行 TLS 握手。

它还支持使用客户端证书对 SOCKS 服务器进行身份验证。或者您可以在此之后只进行纯文本(甚至 GSS-API)身份验证。

请注意,这不是 1997 年 draft-aft-socks-ssl-00 中提出的方法,该方法建议在 SOCKS 框架的顶部分层 TLS(IMO 是一种不必要的复杂方法,它只提供一个好处 -是否能够协商 SSL - 有很多缺点)。

【讨论】:

以上是关于是否存在支持 SSL 的 SOCKS 代理服务器?的主要内容,如果未能解决你的问题,请参考以下文章

通过 SOCKS5 代理的 SSL 连接

天气 SSL SOCKS5 代理加密的 TCP/IP 标头信息

JSch 是不是支持 SOCKS5 代理?

没有 SslStream 的 SSL,因为我想通过 SOCKS5 代理连接

代理无法通过 SSL 连接工作

如何使用SOCKS5代理服务器?