如何避免 lftp 证书验证错误?

如何避免 lftp 证书验证错误?

我正在努力鹈鹕博客正常工作。它使用 lftp 将实际博客传输到服务器,但我总是收到错误:

mirror: Fatal error: Certificate verification: subjectAltName does not match ‘blogname.com’

我认为 lftp 正在检查 SSL,而 Pelican 的快速设置只是忘记包含我的 FTP 上没有 SSL。


这是 Pelican 的 Makefile 中的代码:

ftp_upload: $(OUTPUTDIR)/index.html
lftp ftp://$(FTP_USER)@$(FTP_HOST) -e "mirror -R $(OUTPUTDIR) $(FTP_TARGET_DIR) ; quit"

在终端上显示为:

    lftp ftp://[email protected] -e "mirror -R /Volumes/HD/Users/me/Test/output /myblog_directory ; quit"

到目前为止,我所做的是通过将 Makefile 更改为以下方式来拒绝 SSL 检查:

lftp ftp://$(FTP_USER)@$(FTP_HOST) -e "set ftp:ssl-allow no" "mirror -R $(OUTPUTDIR) $(FTP_TARGET_DIR) ; quit"

由于我的错误实施,我可以正确登录(),但是单行功能不再起作用,我必须手动输入镜像命令:lftp [email protected]:~>

mirror -R /Volumes/HD/Users/me/Test/output/ /myblog_directory

这项工作不会出现错误和超时。问题是如何用一行代码来实现这一点。


此外我还尝试过:

  • set ssl:verify-certificate/ftp.myblog.com no
  • 这个技巧在 lftp 中禁用证书验证:

    $ cat ~/.lftp/rc 设置 ssl:验证证书否

但是,我的 lftp 目录中似乎没有“rc”文件夹 - 所以这个提示没有机会起作用。

答案1

来自手册页

-c 命令执行给定的命令并退出。命令可以用分号 ( )、AND ( ) 或 OR ( )
分隔。请记住在 shell 中正确引用命令参数。此选项必须单独使用,不能与其他参数一起使用。;&&||

因此,您需要将命令指定为单个参数,并用分号分隔:

lftp ftp://$(FTP_USER)@$(FTP_HOST) -e "set ftp:ssl-allow no; mirror -R $(OUTPUTDIR) $(FTP_TARGET_DIR) ; quit"

您实际上可以省略该quit命令并使用-c代替-e

答案2

我遇到了类似的问题,尽管我的 lftp 确实在 (Fedora RPM) 中编译了 ssl 支持。 ssl:verify-certificate false这对我有用。

答案3

无需证书检查

echo "set ssl:verify-certificate no" >> ~/.lftp/rc

会解决问题,如果你不想需要检查的证书

带证书的安全解决方案是

使用 lftp 一步步对我有用的是:

  1. 获取证书的主机openssl s_client -connect <ftp_hostname>:21 -starttls ftp,在结果的开头我得到了类似的-----BEGIN CERTIFICATE----- MIIEQzCCAyu.....XjMO -----END CERTIFICATE-----
  2. 复制-----BEGIN CERTIFICATE----- MIIEQzCCAyu.....XjMO -----END CERTIFICATE----- 进入 /etc/ssl/certs/ca-certificates.crt
  3. 进入lftp 配置引用此证书文件添加到/etc/lftp.conf系统范围set ssl:ca-file "/etc/ssl/certs/ca-certificates.crt"
  4. 然后进行同步或其他操作lftp,我的情况是lftp -u "${FTP_USER},${FTP_PWD}" ${FTP_HOST} -e "set net:timeout 10;mirror ${EXCLUDES} -R ${LOCAL_SOURCE_PATH} ${REMOTE_DEST_PATH} ; quit"

答案4

我也遇到了类似的 SSL 证书验证错误。将 verify-certificate 设置为“no”对我来说有效。

例子:

lftp -c '设置 ftps:initial-prot“”; 设置 ftp:ssl-force true; 设置 ftp:ssl-protect-data true;设置 ssl:验证证书编号;open -u 用户名,密码 208.82.204.46; put uploadfilename;'

相关内容