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

Posted

技术标签:

【中文标题】没有 SslStream 的 SSL,因为我想通过 SOCKS5 代理连接【英文标题】:SSL without SslStream because I'd like to connect through a SOCKS5 Proxy 【发布时间】:2011-05-19 23:11:44 【问题描述】:

背景信息:用 C# 编写的程序

我现在正在开发一个通过 SOCKS5 代理连接的程序(从头开始编码。运行良好。),但我也想(通过该代理)通过 SSL 与 DESTINATION 通信。

我做了一些研究,用谷歌搜索了很多次,得出的结论是 SslStream 不适合我的情况。我需要先通过代理向 SSL 进行身份验证,然后在收到密钥后开始发送加密数据包。

问题:

如何在 C# 中使用 TLS 加密我的数据包?由于某种原因,我根本无法弄清楚。我被困住了! :(

甚至请求所说的 SSL 证书所需的原始语法是什么?

【问题讨论】:

有了现在的问题,你会得到比答案更多的问题。 好的,感谢您的意见。我想真正从某个地方开始,所以如果有人能说一些与 Fantius 说的不同的话,我会比现在的我领先 10 步。谢谢。 为什么不能明文从客户端到代理,从代理到服务器不能使用SSL?显然这意味着对代理的代码更改。 另外,您要针对什么进行身份验证?最后的服务器? “使用 SSL 进行身份验证”毫无意义。是什么让您认为在进入 SSL 模式之前需要进行身份验证? 我正在尝试通过 socks5 代理连接到 https。根据我的研究,我不能使用 sslstream。我正在通过纯文本与代理服务器通信。我的目标是能够通过 socks 5 代理然后连接到 SSL。我还询问从证书中获取密钥后如何加密数据包。感谢您的跟进。非常感谢。 【参考方案1】:

您可能想看看开源 Bouncy Castle cryptography library 中的 TLS 实现。如果它不能按原样工作,你可以破解它来做你需要的事情。如果你想深入了解规范本身,你会发现它是IETF RFC 5246。

不过,正如您可能已经发现的那样,自己完成连接设置工作的任何部分都会使您无法使用WebRequest 系列类来处理协议工作的 HTTP 部分。这给你留下了两个我可以看到的选择:自己也做 HTTP(我发现一个trivial example HTTP client 在网上漂浮),或者更改当前的用户代理服务器设置

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet 设置] “代理启用”=dword:00000001 "代理服务器"="socks=socks.example.net:1080"

然后使用WebRequest 类正常发送请求。

【讨论】:

【参考方案2】:

我想向您提供我们的 SecureBlackbox 产品的SSLBlackbox 包。在众多其他组件中,它有一个基于套接字的简单 SSL 客户端组件,可以通过不同的代理(SOCKS、HTTPS CONNECT)进行连接,并支持 SSL/TLS 的所有功能,最高支持 TLS 1.2。如果您需要更多控制,您可以使用任何自定义套接字,而不仅仅是内置套接字支持。这使您可以使用组件来保护根本不通过套接字的流量(信鸽邮件也可以通过这种方式得到保护)。

HTTPS 客户端可用并且也包含在 SSLBlackbox 中。

【讨论】:

以上是关于没有 SslStream 的 SSL,因为我想通过 SOCKS5 代理连接的主要内容,如果未能解决你的问题,请参考以下文章

SslStream.AuthenticateAsServer 异常 - 服务器模式 SSL 必须使用具有关联私钥的证书

c#SslStream的read()函数如何知道何时返回0?

SslStream.AuthenticateAsClient() 使用未缓存的 CRL 非常慢

APNS SSlStream 身份验证失败,因为远程方已关闭传输流

如何将 PFX 证书文件应用于 SslStream 套接字侦听器?

身份验证失败,因为远程方已关闭传输流