You need to enable JavaScript to run this app. 如何通过Visual Basic向使用自签名证书的安全FTP服务器上传文件
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Visual Basic向使用自签名证书的安全FTP服务器上传文件

自签名证书FTP over SSL 上传相关问题解答

核心问题明确

  • 自签名证书场景下,证书文件的合法获取渠道
  • 自签名证书与FtpWebRequest的正确配置方式
  • PEM格式自签名证书的客户端、服务端交互逻辑
  • 现有代码运行报错的原因排查

对应问题的解决方案

1. 自签名证书的获取渠道

自签名证书没有受公开CA的信任链路,不存在公开渠道可下载,需要主动从服务端侧获取:

  • 对接企业内部FTPS服务时,直接向服务运维人员索要服务端用于TLS加密的PEM格式自签名证书文件即可,无需向第三方机构申请。
  • 若未提前拿到证书,可通过临时允许证书校验的方式建立一次FTPS连接,将握手过程中服务端返回的证书导出保存为本地PEM文件。

2. 证书与FtpWebRequest的配置逻辑

  • 注意核心概念区分:request.ClientCertificates集合存储的是双向TLS场景下客户端出示给服务端的身份认证证书,并非用于信任服务端自签名证书的配置入口。原代码报错的核心原因就是混淆了两类证书的配置逻辑。
  • 针对自签名服务端证书的信任配置,需要重写ServerCertificateValidationCallback回调规则,将我们提前获取的服务端自签名证书加入信任列表,而非把服务端证书塞进客户端认证的证书集合。
  • PEM格式证书的加载可直接通过X509Certificate2.CreateFromPemFile()方法实现,无需额外做格式转换。

3. 服务端与客户端的证书交互逻辑

  • FTPS协议的TLS握手阶段,服务端会默认向所有连接的客户端下发自身的证书,不存在需要客户端手动配置证书代替服务端下发的情况。
  • 自签名证书的报错根源是系统内置的受信任CA列表没有对应根信任锚,客户端默认会抛出“证书链不受信任”的拦截报错,此时需要在客户端侧手动配置信任规则,而非修改服务端的证书下发流程。

修正后的可运行代码示例

' 加载本地保存的服务端自签名PEM证书
Dim trustedServerCert As X509Certificate2 = X509Certificate2.CreateFromPemFile("D:\certs\ftps_server.pem")
Dim request As FtpWebRequest = WebRequest.Create(FTP_Address)
request.Credentials = New NetworkCredential(FTP_Username, FTP_Password)
' 配置证书信任规则:仅信任我们提前获取的指定自签名证书,拒绝其他所有不受信任的证书
ServicePointManager.ServerCertificateValidationCallback = Function(sender, cert, chain, sslPolicyErrors)
    Dim currentCert = CType(cert, X509Certificate2)
    Return currentCert.RawData.SequenceEqual(trustedServerCert.RawData)
End Function
' 仅在需要双向TLS客户端认证时,才向ClientCertificates集合添加对应的客户端证书
request.EnableSsl = True
request.Method = WebRequestMethods.Ftp.UploadFile

报错说明

存在错误的代码运行截图

原代码报错本质:错误地将服务端自签名证书作为客户端认证证书添加到ClientCertificates集合,且未配置自签名证书的信任回调规则,导致TLS握手阶段直接被系统的证书信任校验拦截。


内容的提问来源于stack exchange,提问作者Nathanael Swanson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 16:24:01