【问题标题】:How to validate X.509 certificate using FTP over TLS (FTPS)?如何使用 FTP over TLS (FTPS) 验证 X.509 证书?
【发布时间】:2019-05-31 10:22:53
【问题描述】:

以下代码能够使用 TLS 连接到 FTP 服务器:

private FtpClient getFtpsClient(System.Uri uri) {
    if (uri.Scheme != "ftps") {
        throw new NotImplementedException("Only ftps is implementent");
    }
    var userInfo = uri.UserInfo.Split(":");
    FtpClient client = new FtpClient(uri.Host, userInfo[0], userInfo[1]);
    client.EncryptionMode = FtpEncryptionMode.Explicit;
    client.SslProtocols = SslProtocols.Tls;
    client.ValidateCertificate += new FtpSslValidation(OnValidateCertificate);
    client.Connect();

    void OnValidateCertificate(FtpClient control, FtpSslValidationEventArgs e) {
        var cert2 = new X509Certificate2(e.Certificate);
        e.Accept = cert2.Verify();
    }
    return client;
}

作为库,我使用 FluentFTP。我想知道X509Certificate2.Verify()这个方法是否足以防止安全问题。

X509Certificate2.Verify() 到底是做什么的?参考文档的信息非常短。

它会在man-in-the-middle attack 上失败吗?

【问题讨论】:

标签: c# .net-core x509


【解决方案1】:

documentation 3 个月前更新,现在回答了这个问题。

方法一:SSL证书无错误时连接。

client.ValidateCertificate += new FtpSslValidation(delegate (FtpClient c, FtpSslValidationEventArgs e) {
    if (e.PolicyErrors != System.Net.Security.SslPolicyErrors.None){
        e.Accept = false;
    }else{
        e.Accept = true;
    }
});

方法 2:如果证书与列入白名单的证书匹配,则连接。

首先您必须发现有效证书的字符串。使用此代码将有效的证书字符串保存到文件中:

client.ValidateCertificate += new FtpSslValidation(delegate (FtpClient c, FtpSslValidationEventArgs e) {
    File.WriteAllText(@"C:\cert.txt", e.Certificate.GetRawCertDataString());
});

然后最后使用这段代码检查收到的证书是否与你信任的证书匹配:

string ValidCert = "<insert contents of cert.txt>";
client.ValidateCertificate += new FtpSslValidation(delegate (FtpClient c, FtpSslValidationEventArgs e) {
    if (e.PolicyErrors == SslPolicyErrors.None || e.Certificate.GetRawCertDataString() == ValidCert) {
        e.Accept = true;
    }else{
        throw new Exception("Invalid certificate : " + e.PolicyErrors);
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2011-01-28
    • 1970-01-01
    • 2017-12-26
    相关资源
    最近更新 更多