【问题标题】:Using FtpWebRequest in Powershell to access Filezilla server with certificate在 Powershell 中使用 FtpWebRequest 访问带有证书的 Filezilla 服务器
【发布时间】:2018-01-29 01:40:34
【问题描述】:

我正在尝试在 Powershell 中使用 FtpWebRequest 访问 Filezilla 服务器,如下所示:

$ftprequest = [System.Net.FtpWebRequest]::Create($sourceuri)
$ftprequest.Method = ([System.Net.WebRequestMethods+Ftp]::ListDirectoryDetails + " -a")
$ftprequest.Credentials = New-Object System.Net.NetworkCredential($username,$password)
$ftprequest.EnableSsl = $true

在 Filezilla Server 中有一个“生成新证书”,这是我用来创建证书的。这创建了一个 Filezilla 指向的用于私钥和证书文件的 .crt 文件。

服务器还配置了“启用 FTPS”和“允许显式 FTP over TLS”选项。

我能够使用 Filezilla 客户端愉快地访问服务器(尽管它警告服务器的证书未知)。

要从 Powershell 客户端访问服务器,而不会收到有关证书的投诉,我的理解是最好的办法是在客户端计算机上导入证书。我设法通过下载 .crt 文件,使用记事本手动剥离私钥部分,然后运行来做到这一点:

Import-Certificate -FilePath .\filezillaCertificate.crt -CertStoreLocation cert:\CurrentUser\My

但是,尝试使用 FtpWebRequest 连接时,我仍然收到错误消息“根据验证程序,远程证书无效。”

谁能指出我正确的方向?

【问题讨论】:

标签: powershell ssl filezilla


【解决方案1】:

这不是 PoSH 问题。这是一个纯粹的 PKI 101(证书实施)问题。

在大多数情况下,自签名证书将始终被视为不受信任,因为无法对其进行验证,没有公共注册机构,也没有与之关联的公共 CRL(证书撤销列表/授权)。

您无法在本地计算机上为远程位置创建 PKI 证书。您必须在远程位置创建证书,或者购买公共证书并将其安装在远程位置证书存储中。公钥和私钥必须驻留在远程服务器/站点上。对于任何服务器/站点,必须将证书注册/颁发给该服务器,然后手动分配给站点(FTP/s、HTTP/s)。

然后,您从目的地下载公共证书并将其安装在本地计算机上。通常安装到本地机器存储。如果您无法使用浏览器下载该公共证书和证书链,请在访问该站点后单击锁,然后您必须请求目标服务器/站点所有者向您发送公共证书,以便您在本地安装。同样,通常安装到本地机器存储。

我知道您的帖子是关于 Filezilla 服务器的(完全披露:我从未见过使用过的服务器),但是下面关于在 IIS 上设置 FTP over SSL 的文章中显示的方法应该类似。

基于 SSL 的 FTP

该元素指定基于安全套接字层 (SSL) 的 FTP FTP服务的设置; FTP over SSL 最初是为 FTP 7.0 中的 IIS 7。

与使用基于 SSL 的 HTTP 不同,后者需要单独的端口和 用于安全 (HTTPS) 通信、安全 FTP 通信的连接 发生在与非安全通信相同的端口上。 FTP 7 支持 两种不同形式的 FTP over SSL:

https://docs.microsoft.com/en-us/iis/configuration/system.applicationhost/sites/site/ftpserver/security/ssl

https://docs.microsoft.com/en-us/iis/publish/using-the-ftp-service/using-ftp-over-ssl-in-iis-7

更新以查找 FileZilla SSL 指南

在 FileZilla FTP 服务器上安装 SSL 证书 https://www.tbs-certificates.co.uk/FAQ/en/FileZilla_FTP_Server.html

在基于 OpenSSL 的服务器上安装证书非常相似 比在 Apache 上这样做:安装 Apache 证书,除了 指示文件路径的说明不一样! 对于 FTP FileZilla 服务器,通过接口:FileZilla Server 选项 -> SSL/TLS 设置:

•将私钥(与CSR一起生成的.key文件)导入到 “私钥文件”。

•在同一个文件中导入证书和证书链: 1) 在您的证书状态页面上,下载“file.cer”文件并 认证链“chain-xxx.txt” 2) 连接这两个 文件合二为一 3) 导入“证书文件”中的文件

如何在 FileZilla 中通过 SSL/TLS 连接 FTP?

创建网站

  1. 转到文件>>站点管理器>>新站点。

  2. 以下是填写所需的详细信息。

• 主机:输入我们的主机名(即 ftp.yourdomain.com)或 IP 地址 已发送欢迎电子邮件。 • 端口:21(默认 FTP 端口为 21,您可以 也可以留空)。 • 协议:FTP - 文件传输协议。 • 加密:从下拉列表中选择必需的基于 TLS 的显式 FTP。 • 登录类型:从下拉列表中选择正常。 • 用户:您的 FTP 用户名。 • 密码:您的 FTP 密码。

https://manage.accuwebhosting.com/knowledgebase/761/How-to-connect-FTP-over-SSLorTLS-in-FileZilla.html

FileZilla wiki 还讨论了如何实现 SSL。

【讨论】:

  • 非常感谢您提供的所有信息。我认为我正确地遵循了这些要点:我在 FileZilla 和我的本地计算机上安装了证书,但不幸的是,我在连接时仍然没有任何乐趣。我的猜测是,关于证书的构造、安装位置或 FTP 客户端如何使用它,我缺少一些细节。看看其他一些 SO 问题,似乎大多数人只是通过返回 true ServicePointManager.ServerCertificateValidationCallback 完全忽略所有证书,并且在全球范围内......对我来说似乎不是最好的主意......
  • 同上,您的证书部署是一个症结所在。是的,许多人忽略了证书问题,但通常只有当他们控制源和目标时。否则,不,忽略证书是一件坏事。如果你无论如何都要忽略它们,那为什么还要使用它们呢。
猜你喜欢
  • 2013-01-20
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
相关资源
最近更新 更多