首页 > 解决方案 > 如何将文件上传到在 Visual Basic 中使用自签名证书的安全 FTP 服务器?

问题描述

我需要将文件上传到具有自签名 SSL 证书的安全 FTP 服务器。

我在哪里可以找到证书文件?

如何将其添加到FtpWebRequest?

我知道文件在服务器上的位置。它是一个.PEM文件。服务器是否将证书发送给客户端,或者我是否需要将证书放在客户端应用程序中。

Dim request As FtpWebRequest = WebRequest.Create(FTP_Address)

request.Credentials = New NetworkCredential(FTP_Username, FTP_Password)

Dim cert As X509Certificate2 = ???

request.ClientCertificates.Add(cert)

request.EnableSsl = True

request.Method = WebRequestMethods.Ftp.UploadFile

有错误的代码

标签: .netvb.netsslftpftpwebrequest

解决方案


要验证证书,请实施ServicePointManager.ServerCertificateValidation回调以根据已知值检查证书的哈希:

Imports System.Net
Imports System.Net.Security
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates
ServicePointManager.ServerCertificateValidationCallback =
    Function(sender As Object, certificate As X509Certificate, chain As X509Chain,
             errors As SslPolicyErrors)
        Return _
            (errors = SslPolicyErrors.None) Or
            certificate.GetCertHashString(HashAlgorithmName.SHA256).Equals(
                "EB8E0B28AE064ED58CBED9DAEB46CFEB3BD7ECA67737179E3C85BC3CD09D4EEC")
    End Function

对于需要的X509Certificate.GetCertHashString重载HashAlgorithmName.SHA256,您需要 .NET 4.8。在旧版本上,使用返回 SHA-1 哈希的无参数重载


基于当您知道无效证书是安全的时测试 X509Certificate.Thumbprint 属性是否安全?


推荐阅读