2 votes

Échec de la poignée de main d'alerte pour l'authentification par certificat du client sslv3 lorsque la directive Location est définie

J'essaie de configurer l'authentification par certificat client pour un service Web fonctionnant sous Rails. Le service fonctionne avec apache2, passenger et mod_ssl. J'ai réussi à générer les clés et à configurer l'authentification par certificat client pour l'ensemble du domaine. Cela fonctionne bien, cependant, lorsque j'essaie d'inclure la directive Location, j'obtiens toujours cette erreur (à partir des navigateurs et du client ruby) :

SSL_connect returned=1 errno=0 state=SSLv3 read finished A: sslv3 alert handshake failure (OpenSSL::SSL::SSLError).  

Lorsque j'exécute la commande depuis curl, j'obtiens cette erreur :

curl: (52) Empty reply from server

Je supprime la directive et cela fonctionne bien. Voici à quoi ressemble ma confirmation pour cet hôte virtuel.

 <VirtualHost *:443 *:80>
    ServerName wrangler.optimis.local
    DocumentRoot "/Users/jmoore/Sites/data-wrangler/public/"
    RackEnv development
    ErrorLog "/Users/jmoore/Sites/data-wrangler/log/error.log"
    CustomLog "/Users/jmoore/Sites/data-wrangler/log/access.log" common
    SetEnv GEM_HOME /Users/jmoore/.rvm/gems/ree-1.8.7-2010.02
    SetEnv GEM_PATH /Users/jmoore/.rvm/gems/ree-1.8.7-2010.02

# Enable SSL on this domain
SSLEngine on
SSLProtocol ALL
SSLCipherSuite HIGH:MEDIUM
SSLCertificateFile /etc/apache2/ssl.key/new/wrangler_servercert.pem
SSLCertificateKeyFile /etc/apache2/ssl.key/new/wrangler_server.nopass.key

# Enable SSL client certificates, but disable verification for the entire domain (we only want it on specific URLs)
#SSLCACertificatePath /etc/apache2/ssl.key/new/demoCA
SSLCACertificateFile /etc/apache2/ssl.key/new/demoCA/cacert.pem
#SSLCertificateChainFile /etc/apache2/ssl.key/new/demoCA/cacert.pem
#SSLVerifyClient require
SSLVerifyClient none
#SSLVerifyDepth 1

<Location /test>
SSLVerifyClient require
SSLVerifyDepth 1
</Location>

 </VirtualHost>

J'ai donc régénéré les certificats plusieurs fois et, à chaque fois, cela fonctionne bien pour l'ensemble du domaine, mais donne l'erreur de poignée de main lorsque j'essaie de limiter à un seul emplacement. Comme ces configurations sont suggérées par la documentation d'Apache, je ne suis pas sûr de ce qui ne va pas. Quelqu'un sait-il comment résoudre le problème de poignée de main qui se produit lorsque vous essayez de limiter l'authentification du client à un seul emplacement ?

1voto

Bruno Points 4069

Votre serveur prend-il en charge l'extension de renégociation TLS (RFC 5746) ? Dispose-t-il d'une version d'OpenSSL qui bloque complètement la renégociation (qui était la solution provisoire pour CVE-2009-3555) ?

Si SSLVerifyClient est limitée à un emplacement, cela implique une deuxième poignée de main pour renégocier le certificat du client. C'est là que se situe le problème de sécurité dans SSL/TLS (CVE-2009-3555) et c'est ce que la RFC 5746 corrige (à condition que le client le supporte également).

Plus d'informations sur les versions en cette réponse de StackOverflow .

1voto

Le problème vient de la directive SSLVerifyClient. Si elle est située dans un emplacement ou un répertoire, vous rencontrerez ce problème. Les directives SSLVerifyClient require et SSLVerifyDepth doivent être définies au niveau de l'hôte virtuel.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X