curl FTPS com certificado de cliente para um vsftpd

3

Gostaria de autenticar clientes FTP por meio do nome de usuário + senha ou de um certificado de cliente. Apenas FTPS é permitido.

Usuário / senha funciona, mas ao testar com curl (não tenho outra opção) e um certificado de cliente, preciso passar um usuário. Não é tecnicamente possível autenticar apenas fornecendo um certificado?

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

Testado com curl -v -k -E client-crt.pem --ftp-ssl-reqd ftp://server:21/testfile , a saída é:

* 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

Isso é teoricamente ok, já que proíbo o acesso anônimo. Se eu especificar um usuário com -u username:pass , ele funcionará, mas também sem um certificado.

O certificado do cliente parece estar ok, parece assim:

client-crt.pem

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

O que estou perdendo? Desde já, obrigado. (O SO é o Solaris 10 SPARC).

    
por weeheavy 18.05.2010 / 15:36

1 resposta

2

O que você precisa é: validação de certificação obrigatória. A diretiva relevante vsftpd é validate_cert, que por padrão é NO.

Adicione as seguintes opções:

require_cert=YES
validate_cert=YES
ca_certs_file=/somewhere/cacerts.pem

Não use certificados autoassinados, pois o servidor verifica o certificado usando um dos certificados de ca nesse arquivo ca_certs_.

    
por 28.05.2010 / 01:01