c# - SslStream 接受证书?

标签 c# ssl ftp

我用 C# 制作了一个简单的 ftp 客户端,它可以满足我的需要(连接到 ftp,可以选择使用代理),但我也希望能够使用 AUTH SSL。

因此,我查看了 SslStream 而不是 NetworkStream,并希望它是一个相当简单的替代品。

然而,在与我的(glftpd,selfsigned openssl cert)ftp 握手时,我似乎遇到了很多问题。这是一个代码片段:

    TcpClient client = new TcpClient("192.168.0.2", 1337);
    SslStream sslStream = new SslStream(
                client.GetStream(),
                false,
                new RemoteCertificateValidationCallback(ValidateServerCertificate),
                null
                );
        try
        {
            sslStream.AuthenticateAsClient("192.168.0.2"); // or "glftpd", neither worked.
        }
        catch (AuthenticationException e)
        {
            Console.WriteLine("Exception: {0}", e.Message);
            if (e.InnerException != null)
            {
                Console.WriteLine("Inner exception: {0}", e.InnerException.Message);
            }
            Console.WriteLine("Authentication failed - closing the connection.");
            client.Close();
            return;
        }

我在 AuthenticateAsClient 上中断并出现 IOException:“由于意外的数据包格式,握手失败。”。 我没有破坏 ValidateServerCertificate(从未达到)。

我发现很难调试这个错误,因为我可以将 TcpClient 端口设置为 1208219421 并且仍然收到相同的错误(所以我什至不知道它是否无法与 ssl 端口通信)。

上面的代码(在我看过的 3-4 个不同的 C# ssl 指南中)修改自 link text

我已经尝试了 sslStream.AuthenticateAsClient(..., ..., SslProtocols.Tls, false) 和 sslStream.AuthenticateAsClient(..., ..., SslProtocols.Ssl3, false) Ssl2 和 Default,以及我知道 TLS 可以与我的 glftpd 安装一起使用。

如果我不得不猜测,我会认为它与机器名/证书名有关,但我已经尝试过证书名(即“glftpd”),所以现在我对失败的原因一无所知握手。

还应该注意的是,该证书是自签名的。

非常感谢任何帮助!

  • 查克

最佳答案

你检查端口号了吗?是这个问题吗?

编辑 1

http://en.wikipedia.org/wki/FTPS

也许您的服务器未处于“隐式”模式?应该吗?

您可能也希望在您的产品中支持显式模式。

编辑 2

(抱歉,我还不能发表评论,没有足够的代表,所以我改为进行编辑。:-))

如果不需要在您的实时代码中同时支持显式和隐式,我通常喜欢尽可能同时在两个端口上运行 TCP 服务器,一个用于隐式 SSL,一个用于显式/非 SSL。您的服务器软件可能支持也可能不支持。

编辑 3

取决于您是否控制服务器/您希望达到的标准符合程度!

隐式模式将被视为稍微不那么标准,但 OTOH 它的工作较少。

编辑 4

使用显式而不是隐式可能更好地防止拒绝服务问题,但我不确定,我必须研究协议(protocol)。我的经验是使用 XMPP。

编辑 5

此外,显式模式的纯文本启动可能会让一些公司法律部门对任何未经授权的访问的法律问题稍微放松一点,而不是直接在网络上直接执行 TLS 乱码。

关于c# - SslStream 接受证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917597/

相关文章:

java - 自签名证书旁路不起作用

html - 使用 Dreamweaver 确保所有网站文件正确上传

c# - 发送多个按键 WatiN

c# - 函数式编程中如何使用StringBuilder?

c# - 将解决方案从 Visual Studio 2005 转换为 2008

java - 有人可以教我如何解释 javax.net.debug 结果吗?

PHP 在连接时接收 SSL 证书参数

c# - MVC4 与 EF 示例代码与工作单元,通用存储库模式?

Python 告诉 ftp 传输何时完成

java - 通过 java 连接到 ftps 站点