我正在尝试使用 gnutls 编译的 curl 通过 FTPS 连接到 SecureTransport 4.5.1。
您需要--ftp-alternative-to-user "SITE AUTH"
使用http://curl.haxx.se/mail/lib-2006-07/0068.html
您觉得我的客户证书有什么问题吗?
我尝试
# mycert.crt
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
# mykey.pem
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
它显示“530 没有提供客户端证书”:
myuser@myserver ~ $ curl -v --ftp-ssl --cert mycert.crt --key mykey.pem --ftp-alternative-to-user "SITE AUTH" -T helloworld.txt ftp://ftp.example.com:9876/upload/
* About to connect() to ftp.example.com port 9876 (#0)
* Trying 1.2.3.4... connected
* Connected to ftp.example.com (1.2.3.4) port 9876 (#0)
< 220 msn1 FTP server (SecureTransport 4.5.1) ready.
> AUTH SSL
< 334 SSLv23/TLSv1
* found 142 certificates in /etc/ssl/certs/ca-certificates.crt
> USER anonymous
< 331 Password required for anonymous.
> PASS [email protected]
< 530 Login incorrect.
> SITE AUTH
< 530 No client certificate presented.
* Access denied: 530
* Closing connection #0
curl: (67) Access denied: 530
我也尝试了 pk8 版本...
# openssl pkcs8 -in mykey.pem -topk8 -nocrypt > mykey.pk8
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
...但得到的结果完全相同。
将客户端证书发送到 SecureTransport 有什么技巧?
答案1
诀窍:不要使用 GnuTLS。确保您的 cURL 是使用 OpenSSL 编译的,例如
$ curl --version
curl 7.19.4 (i686-pc-linux-gnu) libcurl/7.19.4 OpenSSL/0.9.8k zlib/1.2.3
Protocols: tftp ftp telnet dict http file https ftps
Features: IPv6 Largefile NTLM SSL libz
我之前曾重新编译过 cURL 以使用 GnuTLS,但根据邮件列表GnuTLS 支持不太好。
由于我使用的是 Gentoo,因此我使用以下命令恢复了默认 cURL
sudo USE="-gnutls" emerge curl
最后,这是对我有用的命令:
curl --user NameInClientCert:anonymous --ftp-ssl --ftp-ssl-reqd --ftp-pasv --disable-epsv --key mykey.pem --cert mycert.crt -T helloworld.txt ftp://ftp.example.com:9876/upload/
(明智的做法是:在 URL 中使用 ftp://,而不是 ftps://)