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

pat*_*ick 65 certificate ftp ssl-certificate verification

我正在努力让我的Pelican 博客正常运行。它使用 lftp 将实际博客传输到某个服务器,但我总是收到错误消息:

mirror: Fatal error: Certificate verification: subjectAltName does not match ‘blogname.com’
Run Code Online (Sandbox Code Playgroud)

我认为 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"
Run Code Online (Sandbox Code Playgroud)

在终端中呈现为:

    lftp ftp://username@blogname.com -e "mirror -R /Volumes/HD/Users/me/Test/output /myblog_directory ; quit"
Run Code Online (Sandbox Code Playgroud)

到目前为止,我管理的是,通过将 Makefile 更改为以下内容来拒绝 SSL 检查:

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

由于我的错误实现,我正确登录 ( lftp username@myblog.com:~>) 但单行功能不再起作用,我必须手动输入镜像命令:

mirror -R /Volumes/HD/Users/me/Test/output/ /myblog_directory
Run Code Online (Sandbox Code Playgroud)

这没有错误和超时。问题是如何用单衬里做到这一点。


另外我试过:

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

    $ cat ~/.lftp/rc set ssl:verify-certificate no

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

mgo*_*ven 51

联机帮助页

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

所以你想将命令指定为单个参数,用分号分隔:

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

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


小智 49

我有一个类似的问题,尽管我的 lftp 确实在(Fedora RPM)中编译了 ssl 支持。 ssl:verify-certificate false帮我解决了这个问题。

  • 基于此,将`set ssl:verify-certificate false` 放在我的`~/.lftprc` 中为我解决了这个问题。 (20认同)
  • ...虽然这违背了使用 SSL 的意义,但您的 lftp 现在很乐意接受它提供的任何证书,使您容易受到 M2M 攻击。 (6认同)

Phi*_*oud 31

没有证书检查

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"

  • 最好在 lftp shell 中执行 `set ssl:verify-certificate no` 来临时禁用当前会话,而不是始终禁用。对于解决方案仍然+1。 (4认同)
  • 这仍然会禁用 SSL 证书的验证,这使得中间人攻击成为可能。如需更好的解决方法,请参阅 [此答案](http://stackoverflow.com/a/44095714/651937)。 (3认同)

小智 9

ssl:verfy-certificate false 对我不起作用,“建立数据连接”时出现超时错误。

我按照这些说明添加set ftp:ssl-allow false到我的~/.lftprc文件中。

  • 你运行命令的时候拼写对了吗?ssl:verify-certificate false (4认同)

小智 8

我也面临类似的 ssl 证书验证错误。将验证证书设置为“否”对我有用。

例子:

lftp -c '设置 ftps:initial-prot ""; 设置 ftp:ssl-force true;设置 ftp:ssl-protect-data true; 设置 ssl:验证证书号;open -u 用户名,密码 208.82.204.46; 输入上传文件名;'


小智 5

另外我试过:

  • 设置 ssl:verify-certificate/ftp.myblog.com 否
  • 这个在 lftp 中禁用证书验证的技巧:

$ cat ~/.lftp/rc set ssl:verify-certificate no

尝试使用set ftp:ssl-allow no; 它对我来说就像一种魅力。