Arquivo

Archive for 03/07/2019

Client Authentication Básico no Apache

Client Authentication é o processo pelo qual usuários acessam um servidor ou um computador remoto por meio da troca de um certificado digital. Nesse artigo, veremos como configurar o Apache para solicitar as credenciais do usuário no momento em que ele acessar a URL do servidor:

Primeiro, é necessário gerar um certificado digital se você ainda não o possui. Crie um arquivo chamado httpd.passwd que armazenará o usuário/senha admin/admin e rode o comando abaixo para criar usuário e senha:

C:\xampp\apache\bin\htpasswd.exe -b c:\temp\www\httpd.passwd "admin" "admin"

O conteúdo do arquivo será esse:

admin:$apr1$VOWUtTEi$TDtLHgk7CwI8rkqwNMX/T.

Adicione o virtual host abaixo. Esse virtual host escuta a porta 443 e correlaciona o certificado digital utilizado para criptografar o tráfego e aquele usuário e senha definidos:

<VirtualHost financeiro.atitudereflexiva.com.br:443>
    DocumentRoot "C:/temp/www" 
    ServerName  financeiro.atitudereflexiva.com.br
    ServerAlias  financeiro.atitudereflexiva.com.br
               
    Options FollowSymLinks Indexes MultiViews Includes

    <Directory  "C:/temp/www">
        Require all granted  
    </Directory>

    SSLEngine on
    SSLCertificateFile "C:/temp/www/server.crt"
    SSLCertificateKeyFile "C:/temp/www/server.key"

    SSLVerifyDepth 5
    SSLVerifyClient none

    <Location "/teste">
        SSLOptions +FakeBasicAuth +StrictRequire
        SSLRequireSSL
        AuthName             "Minha Autenticacao"
        AuthType             Basic
        AuthBasicProvider    file
        AuthUserFile         "C:/temp/www/httpd.passwd"
        Require              valid-user
    </Location>

</VirtualHost>

Reinicie o Apache e faça os testes. Se você quiser solicitar que o próprio usuário informe o certificado digital para depois validar algum elemento presente no certificado digital, como o e-mail, por exemplo, pode fazer algo assim:

    SSLProtocol -all +TLSv1.2
    <Location "/teste">
       SSLVerifyClient require
       SSLVerifyDepth 3
       SSLRequire (%{SSL_CLIENT_S_DN_Email} in 
          {"mail1@teste.com.br","mail2@teste.com.br"}
       )
       SSLRenegBufferSize 31457280
    </Location>

Referências

1. JOHNSON, Kim. What is Client Authentication and Why Do I Need It?. GlobalSign. Disponível em: [https://www.globalsign.com/en/blog/client-authentication-introduction/]. Acesso em 24 abr. 2019.

2. WHEELER, David A. Configuring Apache for Client Certificates (such as DoD CAC cards) on Red Hat Linux/CentOS. David A. Wheeler’s Personal Home Page. Disponível em: [https://dwheeler.com/essays/apache-cac-configuration.html]. Acesso em 24 abr. 2019.

2. WHEELER, David A. SSL/TLS Strong Encryption: How-To. Apache HTTP Server. Disponível em: [http://httpd.apache.org/docs/2.2/ssl/ssl_howto.html]. Acesso em 24 abr. 2019.