SslStream接受证书吗?

4

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

因此,我不是使用NetworkStream,而是查看了SslStream,并希望它是一个相当容易的替换。

然而,在与我的ftp(glftpd,自签名的openssl证书)进行握手时,我似乎遇到了很多问题。这里是一段代码片段:

    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指南中)是改编自链接文本

我尝试过使用sslStream.AuthenticateAsClient(..., ..., SslProtocols.Tls, false)和sslStream.AuthenticateAsClient(..., ..., SslProtocols.Ssl3, false) Ssl2和Default,我确信TLS可以与我的glftpd安装一起工作。

如果我必须猜测,我认为它与machinename/certname有关,但我已经尝试了certname(它是"glftpd"),所以现在我对为什么我会得到“握手失败”毫无头绪。

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

非常感谢任何帮助!

  • Chuck
1个回答

1

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

编辑 1

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

也许你的服务器不是在“隐式”模式下?应该吗?

你可能也想要产品支持显式模式/非SSL模式。

编辑2

(抱歉,我还不能发表评论,声望不够,所以我只能进行编辑。:-))

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

编辑3

这取决于您是否控制服务器/您希望符合哪些标准!

隐式模式将被视为稍微不太符合标准,但另一方面它的工作量较小。

编辑4

使用显式而不是隐式可能更好地保护免受拒绝服务问题的影响,但我不确定,我必须研究协议。我的经验是XMPP。

编辑5

加上显式模式的纯文本启动可能会使一些公司法律部门对任何未经授权的访问的法律问题更加放松,而不是直接在电线上进行TLS胡言乱语的东西。


很遗憾,我不这么认为。端口应该是正确的。1337是我可以在各种FTP客户端中使用非SSL和AUTH SSL连接的端口,但还是谢谢你的回复。 - user233259
你说得对,隐式加密是不支持的。所以可能是这个原因。我想要的是AUTH SSL或者只是TLS也可以(如果那样做更少工作的话?) - user233259
我的目标就是简单地连接到一个IP(TCP)。然后能够发送“AUTH TSL”(或“AUTH SSL”),并接受证书,无论如何都建立起安全连接。 - user233259
我感谢您对安全问题的关注,但是我至少需要回答是/否来接受证书,而且如果选择“是”,它将无论如何被接受。 - user233259
假设协议使用的证书可以回答是/否。我觉得我们基本上是在同一页面上。 - martinr
显示剩余4条评论

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