.net - 如何将文件上传到在 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
解决方案
要验证证书,请实施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 哈希的无参数重载。
推荐阅读
- wordpress - Wordpress 中的错误“注意:尝试访问 null 类型值的数组偏移量”
- javascript - 在装饰器中获取原始方法的文件路径?
- android-recyclerview - 约束布局内的Recyclerview
- hybris - 如何本地化在 Hybris 的 trainingcore-items.xml 中创建的自定义类型?
- octave - 尝试计算向量的平均值时的八度越界错误
- live-streaming - 全球服务器上的 Jetson Nano 远程桌面
- dynamics-crm - Dynamics CRM 和 ADF 管道域
- visual-studio-code - 节点不在 vs 代码的集成终端中运行
- php - 在 Codeigniter 中创建备份 Zip 文件,但在 PhpmyAdmin 中导入此文件时,它不会导入
- java - 带有 Ant 的 Netbeans 12 如何更改默认 lib 文件夹