【发布时间】: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 上失败吗?
【问题讨论】:
-
根据您提供的内容无法判断。您需要提供 FluentFTP 的实现。您可能还对How to verify chain in RemoteCertificateValidationCallback? 感兴趣