Autenticação de certificado de cliente falha de handshake de alerta sslv3 quando a diretiva Location está definida

2

Estou tentando configurar a Autenticação de Certificado do Cliente para um serviço da Web em execução no Rails. O serviço está sendo executado no apache2, passageiro e mod_ssl. Consegui gerar as chaves com êxito e configurar a autenticação do certificado de cliente para todo o domínio. Isso funciona bem, no entanto, quando tento incluir a diretiva Location sempre recebo esse erro (dos navegadores e do cliente Ruby):

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

Quando executo o comando do curl, recebo este erro:

curl: (52) Empty reply from server

Eu removo a diretiva e ela funciona bem. Isso é o que minha confirmação para esse host virtual parece.

 <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>

Minha pesquisa indicou que isso geralmente é causado por certificados ruins, por isso eu regenerei os certificados várias vezes e sempre funciona bem para todo o domínio, mas dá o erro de handshake quando tento limitar a apenas um local. Como essas configurações são sugeridas pela documentação do apache, não tenho certeza do que está errado. Alguém sabe como resolver o problema de handshake que acontece quando você tenta limitar a autenticação do cliente a um local?

    
por Josh Moore 20.09.2010 / 04:56

2 respostas

1

O seu servidor suporta a extensão de renegociação TLS (RFC 5746)? Tem uma versão do OpenSSL que bloqueia a renegociação completamente (que era a correção temporária para CVE-2009-3555)?

Se SSLVerifyClient estiver limitado a um local, isso implicará em um segundo handshake para renegociar o certificado de cliente. Este é o lugar onde o problema de segurança em SSL / TLS (CVE-2009-3555) estava acontecendo e o que o RFC 5746 corrige (desde que o cliente também o suporte).

Mais informações sobre as versões em esta Resposta do StackOverflow .

    
por 20.09.2010 / 18:29
1

O problema é a diretiva SSLVerifyClient. Se localizado dentro de um local ou diretório, você terá esse problema. O SSLVerifyClient requer e SSLVerifyDepth deve ser definido no nível do host virtual.

    
por 07.03.2011 / 15:47