使用客户端证书 curl FTPS 到 vsftpd

使用客户端证书 curl FTPS 到 vsftpd

我想通过用户名+密码或客户端证书来验证 FTP 客户端。仅允许使用 FTPS。

用户/密码有效,但在使用 curl(我没有其他选择)和客户端证书进行测试时,我需要传递用户。从技术上讲,仅通过提供证书是否可行?

vsftpd 配置文件

passwd_chroot_enable=YES
chroot_local_user=YES
ssl_enable=YES
rsa_cert_file=usrlocal/ssl/certs/vsftpd.pem
force_local_data_ssl=YES
force_local_logins_ssl=YES

经过测试的curl -v -k -E client-crt.pem --ftp-ssl-reqd ftp://server:21/testfile输出是:

* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Request CERT (13):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS handshake, CERT verify (15):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using DES-CBC3-SHA
* Server certificate:
*        SSL certificate verify result: self signed certificate (18), continuing anyway.
> USER anonymous
< 530 Anonymous sessions may not use encryption.
* Access denied: 530
* Closing connection #0
* SSLv3, TLS alert, Client hello (1):
curl: (67) Access denied: 530

理论上这是可以的,因为我禁止匿名访问。如果我指定一个用户,-u username:pass它就可以工作,但如果没有证书,它也会这样。

客户端证书似乎没有问题,它看起来像这样:

客户端-crt.pem

-----BEGIN RSA PRIVATE KEY-----
content
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
content
-----END CERTIFICATE-----

我遗漏了什么?提前致谢。(操作系统是 Solaris 10 SPARC)。

答案1

您需要的是:强制证书验证。相关的 vsftpd 指令是validate_cert,默认情况下为 NO。

添加以下选项:

require_cert=YESvalidate_cert
=
YESca_certs_file=/somewhere/cacerts.pem

不要使用自签名证书,因为服务器会使用该 ca_certs_file 中的 ca 证书之一来检查证书。

相关内容