我查看了相关问题,但没有一个解决了我的问题。
我正在尝试使用curl 通过 ftp 将文件从运行 vsftpd 的 EC2 服务器上的 FTPS 服务器传输到我的 dmz 中的服务器。
$ curl ftps://ec2-myserver.compute.amazonaws.com --verbose --tlsv1.1
* Rebuilt URL to: ftps://ec2-myserver.us-east-2.compute.amazonaws.com/
* Trying ip_addr...
* TCP_NODELAY set
* Connected to ec2-myserver.us-east-2.compute.amazonaws.com (ip_addr) port ---- (#0)
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.1 (OUT), TLS handshake, Client hello (1):
* error:1408F10B:SSL routines:ssl3_get_record:wrong version number
* Closing connection 0
我能够从 Windows 服务器上的 Filezilla 获取文件连接 FTPS。
我在每个 TLS 版本中都遇到相同的错误。
我尝试在 vsfpd 服务器上启用 ssl3 但没有解决问题。
答案1
我在 chroot 配置中运行 vsftpd,它默默地失败了(因为我猜它无法/dev/log
在 chroot 中访问?)
chroot_local_user=YES
local_root=public_html
我会OK LOGIN
在 中看到vsftpd.log
,但在客户端上发送密码中的用户名后,它将失败并出现以下错误:
client% openssl s_client -connect testftps.example.org:21 --tls1_2 --starttls ftp -quiet
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = testftps.example.org
verify return:1
220 Welcome to TEST vsftpd FTPS service.
user ftptest
331 Please specify the password.
pass xxxxxxxx
140419419894912:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../ssl/record/ssl3_record.c:308:
只有 stracing vsftpd 才揭示了问题:
server# strace -tt -ff -s500 -p `pidof vsftpd`
[...]
[pid 27164] 18:31:56.249184 access("/", W_OK) = 0
[pid 27164] 18:31:56.249386 fcntl(0, F_GETFL) = 0x2 (flags O_RDWR)
[pid 27164] 18:31:56.249599 fcntl(0, F_SETFL, O_RDWR|O_NONBLOCK) = 0
[pid 27164] 18:31:56.249763 write(0, "500 OOPS: ", 10) = 10
[pid 27164] 18:31:56.250118 write(0, "vsftpd: refusing to run with writable root inside chroot()", 58) = 58
[pid 27164] 18:31:56.250436 write(0, "\r\n", 2) = 2
[pid 27164] 18:31:56.250758 exit_group(2) = ?
所以修复是chmod 500 ~ftptest/public_html
,但也可能是其他任何东西,strace
才是真正的问题发现者。