使用Curl通过FTP连接合作方站点时遇域名解析失败及SSL握手失败问题求助
Curl通过FTP连接合作方站点时遇域名解析失败及SSL握手失败问题求助
先帮你揪出最明显的问题,再一步步排查其他可能:
1. 先修正curl参数的语法错误
你的命令里用了 -cert,但curl的客户端证书参数是双短横线的 --cert!单短横线的 -cert 会被curl解析成多个单字符选项的组合(-c、-e、-r、-t),然后把后面的 domainname.crt 当成要访问的主机名——这就是为什么会出现 Could not resolve host: domainname.crt 错误的核心原因!
先把命令里的 -cert 改成 --cert,这是必须先做的修正:
curl -v -kG --ftp-method nocwd --ftp-ssl --cert "domainname.crt" --key "domainname.key" -u user:password ftp://ftp.partner.biz/
2. 排查SSL握手失败的可能原因
修正参数后,再针对握手失败问题逐一排查:
- 证书/密钥的路径与格式:确保
domainname.crt和domainname.key的路径正确(如果不在当前执行命令的目录,要写绝对路径,比如/home/youruser/certs/domainname.crt);另外确认证书是PEM格式,如果是DER格式,需要加上--cert-type DER和--key-type DER参数。 - 调整FTP SSL模式:
--ftp-ssl是尝试启用SSL,但有些服务器要求强制SSL,或者只在控制通道启用SSL,可以试试换成--ftp-ssl-reqd(强制SSL,否则连接失败)或者--ftp-ssl-control(仅控制通道用SSL)。 - 强制IPv4连接:你的服务器监听的是tcp6,但合作方的FTP服务器可能不支持IPv6,在curl命令里加
-4参数强制使用IPv4,看看是否能解决握手问题:
curl -v -4 -kG --ftp-method nocwd --ftp-ssl-reqd --cert "domainname.crt" --key "domainname.key" -u user:password ftp://ftp.partner.biz/
- 确认客户端证书的有效性:虽然合作方说他们那边没日志,但还是要检查你提供的客户端证书是否是合作方预先授权过的,有没有过期、密钥不匹配的情况。可以用以下命令验证证书和密钥是否匹配:
openssl x509 -in domainname.crt -text -noout openssl rsa -in domainname.key -text -noout
对比两者的公钥信息是否一致。
3. 额外调试建议
如果还是无法解决,可以用 --trace-ascii 参数保存详细的通信日志,方便进一步定位问题,或者把日志发给合作方帮忙排查:
curl -v -4 -kG --ftp-method nocwd --ftp-ssl-reqd --cert "domainname.crt" --key "domainname.key" -u user:password --trace-ascii debug.log ftp://ftp.partner.biz/
备注:内容来源于stack exchange,提问作者vrao
相关产品推荐
相关产品推荐

