Назад | Перейти на главную страницу

curl FTPS с клиентским сертификатом в vsftpd

Я хочу аутентифицировать FTP-клиентов с помощью имени пользователя и пароля или сертификата клиента. Разрешен только FTPS.

Пользователь / пароль работают, но при тестировании с помощью curl (у меня нет другого варианта) и сертификата клиента мне нужно передать пользователя. Разве технически невозможно пройти аутентификацию, только предоставив сертификат?

vsftpd.conf

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 он работает, но и без сертификата.

Сертификат клиента вроде в порядке, он выглядит так:

client-crt.pem

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

Что мне не хватает? Заранее спасибо. (ОС - Solaris 10 SPARC).

Что вам нужно: обязательная проверка сертификата. Соответствующая директива vsftpd - это validate_cert, которая по умолчанию - NO.

Добавьте следующие параметры:

require_cert = ДА
validate_cert = ДА
ca_certs_file = / где-то / cacerts.pem

Не используйте самозаверяющие сертификаты, так как сервер проверяет сертификат, используя один из сертификатов CA в этом ca_certs_file.