如何在.NET中为SSL连接指定密码?

7
如何在SSL连接中指定密码套件?
我知道Mentalis Seclib有这个功能,但他们不再维护该项目(在x64操作系统上存在问题)。他们说.NET Framework 2.0引入了这些功能,但我无法在.NET Framework 3.5中找到方法。
更具体地说,我想使用NULL密码套件连接HTTPS服务,我会使用以下命令在OpenSSL中执行同样的操作:
openssl s_client -connect www.example.com:443 -cipher NULL 

我该如何在.NET中实现这个?

同时,商业或商业友好许可证的库建议也受欢迎。

3个回答

6
我的之前的回答是错误的,我一开始没有注意到我所提到的属性是只读的。
在.NET 4中,System.Net.Security.SslStream类支持一个新的构造函数,允许您提供一个EncryptionPolicy值,可以是NoEncryption。这允许没有加密,并请求如果另一个端点可以处理NULL密码,则使用NULL密码。
不幸的是,即使在3.5中也不存在这个功能。
这并不是问题的一部分,但我假设(这真的是为了未来的读者),您当然知道使用SSL与NULL密码存在的相关风险和您错过的好处?

0
根据文档,当使用SChannel时,您可以通过SCHANNEL_CRED结构的palgSupportedAlgsdwMinimumCipherStrengthdwMaximumCipherStrength参数来设置密码。
为了启用NULL加密算法,您应该将dwMinimumCipherStrength设置为-1。
注意:这仅基于文档。我不是.NET开发人员,但我一直在寻找答案,因为我支持一个具有.NET客户端的服务。

有没有想过如何在.NET中使用SCHANNEL或者是否有任何.NET的封装器? - dr. evil
对于.NET 3.5,我不知道。.NET 4引入了一个EncryptionPolicy枚举,允许您配置HttpWebRequest以允许或要求在HTTPS连接中使用NULL密码。我将该信息发送给我的.NET客户端,他已确认它可以工作。如果这对您有用,我可以编写如何使用它的说明。 - Matthieu
听起来很有趣,你能给我指一篇文章或者提供一段代码片段吗? - dr. evil

0
在.NET中,您可以使用SSLStream类。在.NET 4.0中,正如Matthieu所说,它允许您指定密码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接