我有一个运行 vsftpd 3.0.3 的 Ubuntu 16.04.3 AWS EC2 实例。普通 FTP 运行良好,但我需要启用 TLS,以便我的客户端可以使用 sftp 上传文件。
我研究了几个小时,但我发现的所有内容都显示了如何配置自生成证书。我想使用从 GoDaddy 购买的通配符 SSL 证书。(与我在 AWS Elastic Load Balancer 上使用的相同)。
我有 .key 文件和从 GoDaddy 下载的两个 .crt 文件。我不知道如何将这三个文件放入 vsftpd 可以理解的格式。我没有收到来自 vsftpd 的错误,但当我使用 FileZilla 连接时,我得到了以下响应:
Status: Connecting to <my ftp subdomain>.<my domain>.com...
Status: Skipping non-existing key file "C:\Users\<some local file1>.ppk"
Status: Skipping non-existing key file "C:\Users\<some local file2>.ppk"
Status: Skipping non-existing key file "C:\Users\<dome local file3>.ppk"
Response: fzSftp started, protocol_version=8
Command: open "<username>@<my ftp subdomain>.<my domain>.com" 22
Error: Disconnected: No supported authentication methods available (server sent: publickey)
Error: Could not connect to server
我已经确认防火墙的22端口是开放的。
顺便说一句,我的最终目标是让客户端在第一次连接时不会收到任何“您是否信任此证书”消息。如果我走错了路,请告诉我。
答案1
对于端口 22,您通常使用 SFTP 而不是 FTPS。区别在于 FTPS 使用 SSL 公钥/私钥对来保护 FTP 事务,并且仍然需要您通过用户名和密码进行身份验证。使用 SFTP,您使用自己生成的公钥/私钥对,并将其绑定到特定用户以用于身份验证。公钥存储在用户的 vsftp 服务器中,而您连接的客户端向服务器提供私钥。我认为您的问题是两者被混淆了,因为错误日志正在寻找 ppk 文件以呈现给服务器以对用户进行身份验证。
为了向您说明,端口 22 已通过 EC2 实例打开,因此您实际上不需要 vsftp,而只需使用创建实例时 AWS 提供的私钥就可以了。您不想使用 vsftp 来使用端口 22,因为这样您将无法在不更改 SSH 运行的端口的情况下通过 ssh 进入您的实例。默认情况下,OpenSSH 服务器已经为您提供了 sftp 功能。如果您特别想使用 FTPS,那么您需要连接到您在 vsftp 配置中定义的端口,并在 EC2 实例使用的安全组中打开任何必要的防火墙端口。
答案2
好的,花了一段时间,但我终于把所有的部分整合在一起了,现在可以工作了!
- 我必须将我的证书、密钥和中级证书连接到单个 .pem 文件中,如下所述:http://www.terminalinflection.com/solaris/vsftpd-configuration/
- 然后我必须按照这篇优秀文章中的描述设置 sshd 的 sftp 子系统:https://www.thegeekstuff.com/2012/03/chroot-sftp-setup/
将以下内容添加到我的 vsftpd.conf 文件中:
force_local_logins_ssl=NO force_local_data_ssl=NO
现在我可以对我的老用户使用普通 ftp,而对我的新用户则要求使用 sftp。