Browser não está pedindo certificado de cliente

1

Estou configurando o Apache para usar a autenticação de certificado de cliente. Quando eu olho para o site, no entanto, ele não me pede um certificado, a menos que SSLCACertificateFile seja especificado. Em seguida, solicitará um certificado por meio do navegador. O navegador abrirá uma caixa solicitando que eu escolha um certificado (ele mostra apenas os certificados assinados pela CA especificados por SSLCACertificateFile).

Estou usando um certificado autoassinado.

Também não importa se os certificados que o 'cliente' usa estão especificados em SSLCACertificatePath.

Qualquer conselho útil sobre por que está agindo dessa maneira? O navegador não está solicitando certificados normais, a menos que seja especificado SSLCACertificateFile?

<VirtualHost _default_:443>
DocumentRoot "C:/documents"
ServerName server.ip:443
ServerAdmin [email protected]
ErrorLog "C:/Apache2.2/logs/error.log"
TransferLog "C:/Apache2.2/logs/access.log"

SSLEngine on
SSLCipherSuite HIGH:MEDIUM

SSLCertificateFile C:/Apache2.2/certs/server.crt

SSLCertificateKeyFile C:/Apache2.2/certs/server.key

SSLCertificateChainFile C:/Apache2.2/certs/ca.crt

SSLCACertificateFile C:/Apache2.2/certs/ca.crt

SSLCACertificatePath C:/Apache2.2/allowed-crts

SSLCARevocationPath C:/Apache2.2/revoked-certs

SSLVerifyClient require
SSLVerifyDepth  2

SSLOptions +ExportCertData +StdEnvVars
<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "C:/Apache2.2/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

BrowserMatch ".*MSIE.*" \
     nokeepalive ssl-unclean-shutdown \
     downgrade-1.0 force-response-1.0

CustomLog "C:/Apache2.2/logs/webservices-ssl_request.log" \
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
    
por user779608 09.05.2012 / 23:00

3 respostas

1

O que você está dizendo faz sentido, e o documento , embora um pouco vago, parece concordar.

SSLCACertificateFile

This directive sets the all-in-one file where you can assemble the Certificates of Certification Authorities (CA) whose clients you deal with. These are used for Client Authentication. Such a file is simply the concatenation of the various PEM-encoded Certificate files, in order of preference. This can be used alternatively and/or additionally to SSLCACertificatePath.

Só para esclarecer, eu entendo que SSLCACertificateFile é necessário para que o servidor saiba quais clientes tem permissão para deixar na área protegida e você precisaria de pelo menos SSLCACertificateFile ou SSLCACertificatePath .

    
por 10.05.2012 / 10:54
0

Ao usar certificados autoassinados, achei mais fácil renunciar ao negócio da CA e usar SSLVerifyClient optional_no_ca combinado com SSLRequire :

    DocumentRoot /srv/www/1
ServerName your.server.tld
SSLCertificateFile /etc/apache2/ssl/your.server.tld.crt
SSLCertificateKeyFile /etc/apache2/ssl/your.server.tld.key
SSLEngine on
SSLOptions +StdEnvVars
<Location />
    Order allow,deny
    allow from all

    SSLRequireSSL
    SSLVerifyDepth 1
    SSLVerifyClient optional_no_ca
    SSLRequire (\
        %{SSL_CLIENT_CERT} eq file("/etc/apache2/ssl/validclient.crt")\
    )
</Location>
    
por 10.05.2012 / 11:20
0

Se você planeja usar certificados de cliente autoassinados (o que pode ser sensato, mas deve ser feito com cautela, pois eles precisarão ser verificados de alguma forma), você precisará:

  • para fazer com que o servidor envie uma lista de CAs vazias em sua mensagem TLS de solicitação de certificado (para que o navegador ofereça uma escolha entre todas as certs, incluindo aquelas autoassinadas): isso pode ser feito usando SSLCADNRequestFile apontando para um arquivo com uma linha vazia;
  • para que o servidor aceite qualquer certificado: isso pode ser feito com SSLVerifyClient optional_no_ca .

Há mais detalhes em esta resposta .

    
por 14.05.2012 / 14:15