使用C#.Net传输FTPS(SSL / TLS)文件
发布时间:2020-12-15 06:41:24 所属栏目:百科 来源:网络整理
导读:我正在编写一个通过FTP站点同步文件的应用程序.现在,它通过常规FTP连接正常工作,但现在我们的IT人员想通过安全的FTPS连接进行设置. 他们为我提供了一个* .cr_证书文件.如果我在记事本中打开文件,我会看到这样的东西(但是真正的键不是foobar显然). -----BEGIN
我正在编写一个通过FTP站点同步文件的应用程序.现在,它通过常规FTP连接正常工作,但现在我们的IT人员想通过安全的FTPS连接进行设置.
他们为我提供了一个* .cr_证书文件.如果我在记事本中打开文件,我会看到这样的东西(但是真正的键不是foobar显然). -----BEGIN RSA PRIVATE FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR FOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBARFOOBAR -----END CERTIFICATE----- 如何使用此证书文件连接到FTPS服务器上传和下载文件?原谅我,但我非常新的任何涉及通过网络传输文件,安全连接,证书,公钥,私钥等等… 我想我想使用一个FtpWebRequest对象,并将EnableSsl属性设置为true.但我不知道这个证书文件在哪里发挥作用. 解决方法
如果您使用
FtpWebRequest Class,您只需要在设置请求时添加一些内容.一定要包括使用System.Security.Cryptography.X509Certificates;声明.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUrl); request.Credentials = new NetworkCredential(userName,password); request.EnableSsl = true; //ServicePointManager.ServerCertificateValidationCallback = ServicePointManager_ServerCertificateValidationCallback; X509Certificate cert = X509Certificate.CreateFromCertFile(@"C:MyCertDirMyCertFile.cer"); X509CertificateCollection certCollection = new X509CertificateCollection(); certCollection.Add(cert); request.ClientCertificates = certCollection; 此外,如果证书生成异常有问题,您可能需要实现自己的证书验证回调方法与ServicePointManager.ServerCertificateValidationCallback Property一起使用.这可以像始终返回true一样简单,或者像我用于调试的一样复杂: public static bool ServicePointManager_ServerCertificateValidationCallback(object sender,X509Certificate certificate,X509Chain chain,SslPolicyErrors sslPolicyErrors) { bool allowCertificate = true; if (sslPolicyErrors != SslPolicyErrors.None) { Console.WriteLine("Accepting the certificate with errors:"); if ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateNameMismatch) == SslPolicyErrors.RemoteCertificateNameMismatch) { Console.WriteLine("tThe certificate subject {0} does not match.",certificate.Subject); } if ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateChainErrors) == SslPolicyErrors.RemoteCertificateChainErrors) { Console.WriteLine("tThe certificate chain has the following errors:"); foreach (X509ChainStatus chainStatus in chain.ChainStatus) { Console.WriteLine("tt{0}",chainStatus.StatusInformation); if (chainStatus.Status == X509ChainStatusFlags.Revoked) { allowCertificate = false; } } } if ((sslPolicyErrors & SslPolicyErrors.RemoteCertificateNotAvailable) == SslPolicyErrors.RemoteCertificateNotAvailable) { Console.WriteLine("No certificate available."); allowCertificate = false; } Console.WriteLine(); } return allowCertificate; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |