Autenticação de dois fatores no site usando token USB. Agora também para Linux

Autenticação de dois fatores no site usando token USB. Agora também para Linux
В um de nossos artigos anteriores falamos sobre a importância da autenticação de dois fatores nos portais corporativos das empresas. Da última vez, demonstramos como configurar a autenticação segura no servidor web IIS.

Nos comentários, fomos solicitados a escrever instruções para os servidores web mais comuns para Linux - nginx e Apache.

Você perguntou - nós escrevemos.

O que você precisa para começar?

  • Qualquer distribuição Linux moderna. Fiz uma configuração de teste no MX Linux 18.2_x64. É claro que esta não é uma distribuição de servidor, mas é improvável que haja diferenças para o Debian. Para outras distribuições, os caminhos para as bibliotecas de configuração podem variar ligeiramente.
  • Símbolo. Continuamos a usar o modelo Rutoken EDS PKI, que é ideal em termos de características de velocidade para uso corporativo.
  • Para trabalhar com um token no Linux, você precisa instalar os seguintes pacotes:
    libccid libpcsclite1 pcscd pcsc-ferramentas opensc

Autenticação de dois fatores no site usando token USB. Agora também para Linux

Emissão de certificados

Em artigos anteriores, contamos com o fato de que os certificados de servidor e cliente serão emitidos usando Microsoft CA. Mas como estamos configurando tudo no Linux, também falaremos sobre uma forma alternativa de emitir esses certificados - sem sair do Linux.
Usaremos XCA como CA (https://hohnstaedt.de/xca/), que está disponível em qualquer distribuição Linux moderna. Todas as ações que realizaremos no XCA podem ser realizadas em modo de linha de comando usando os utilitários OpenSSL e pkcs11-tool, mas para maior simplicidade e clareza, não as apresentaremos neste artigo.

Introdução

  1. Instalar:
    $ apt-get install xca
  2. E corremos:
    $ xca
  3. Criamos nosso banco de dados para CA - /root/CA.xdb
    Recomendamos armazenar o banco de dados da Autoridade de Certificação em uma pasta onde somente o administrador tenha acesso. Isto é importante para proteger as chaves privadas dos certificados raiz, que são usadas para assinar todos os outros certificados.

Crie chaves e certificado de CA raiz

Uma infraestrutura de chave pública (PKI) é baseada em um sistema hierárquico. O principal neste sistema é a autoridade de certificação raiz ou CA raiz. Seu certificado deve ser criado primeiro.

  1. Criamos uma chave privada RSA-2048 para a CA. Para fazer isso, na guia Chaves Privadas Empurre Nova Chave e selecione o tipo apropriado.
  2. Defina um nome para o novo par de chaves. Eu chamei isso de CA Key.
  3. Emitimos o próprio certificado CA, utilizando o par de chaves criado. Para fazer isso, vá para a guia Certificados e pressione Novo certificado.
  4. Certifique-se de escolher SHA-256, porque o uso de SHA-1 não pode mais ser considerado seguro.
  5. Certifique-se de escolher como modelo [padrão] CA. Não esqueça de clicar em Aplicar tudo, caso contrário o modelo não será aplicado.
  6. aba Assunto escolha nosso par de chaves. Lá você poderá preencher todos os campos principais do certificado.

Autenticação de dois fatores no site usando token USB. Agora também para Linux

Criando chaves e um certificado de servidor https

  1. De forma semelhante, criamos uma chave privada RSA-2048 para o servidor, chamei-a de Server Key.
  2. Ao criar um certificado, selecionamos que o certificado do servidor deve ser assinado com um certificado CA.
  3. Não se esqueça de selecionar SHA-256.
  4. Nós escolhemos como modelo [padrão] HTTPS_server. Clique em Aplicar tudo.
  5. Então na aba Assunto selecione nossa chave e preencha os campos obrigatórios.

Autenticação de dois fatores no site usando token USB. Agora também para Linux

Crie chaves e certificado para o usuário

  1. A chave privada do usuário será armazenada em nosso token. Para trabalhar com ele, você precisa instalar a biblioteca PKCS#11 do nosso site. Para distribuições populares, distribuímos pacotes prontos, localizados aqui - https://www.rutoken.ru/support/download/pkcs/. Também temos assemblies para arm64, armv7el, armv7hf, e2k, mipso32el, que podem ser baixados em nosso SDK - https://www.rutoken.ru/developers/sdk/. Além dos assemblies para Linux, também existem assemblies para macOS, freebsd e android.
  2. Adicionando um novo provedor PKCS#11 ao XCA. Para fazer isso, vá ao menu Opções para a guia Provedor PKCS#11.
  3. Nós pressionamos Adicionar e selecione o caminho para a biblioteca PKCS#11. No meu caso é usrliblibrtpkcs11ecp.so.
  4. Precisaremos de um token Rutoken EDS PKI formatado. Baixe o utilitário rtAdmin - https://dev.rutoken.ru/pages/viewpage.action?pageId=7995615
  5. Realizamos
    $ rtAdmin -f -q -z /usr/lib/librtpkcs11ecp.so -u <PIN-код пользователя>
  6. Selecionamos a chave RSA-2048 para Rutoken EDS PKI como o tipo de chave. Chamei essa chave de Chave do Cliente.

    Autenticação de dois fatores no site usando token USB. Agora também para Linux

  7. Digite o código PIN. E aguardamos a conclusão da geração de hardware do par de chaves

    Autenticação de dois fatores no site usando token USB. Agora também para Linux

  8. Criamos um certificado para o usuário por analogia com o certificado do servidor. Desta vez selecionamos um modelo [padrão] HTTPS_client e não se esqueça de clicar Aplicar tudo.
  9. aba Assunto insira informações sobre o usuário. Respondemos afirmativamente ao pedido de salvamento do certificado do token.

Como resultado, na guia Certificados no XCA você deve obter algo assim.

Autenticação de dois fatores no site usando token USB. Agora também para Linux
Este conjunto mínimo de chaves e certificados é suficiente para começar a configurar os próprios servidores.

Para configurar, precisamos exportar o certificado CA, o certificado do servidor e a chave privada do servidor.

Para fazer isso, selecione a entrada desejada na guia correspondente no XCA e clique em Exportações.

nginx

Não vou escrever como instalar e executar um servidor nginx - há artigos suficientes sobre esse assunto na Internet, sem mencionar a documentação oficial. Vamos direto à configuração do HTTPS e da autenticação de dois fatores usando um token.

Adicione as seguintes linhas à seção do servidor em nginx.conf:

server {
	listen 443 ssl;
	ssl_verify_depth 1;
	ssl_certificate /etc/nginx/Server.crt;
	ssl_certificate_key /etc/nginx/ServerKey.pem;
	ssl_client_certificate /etc/nginx/CA.crt;
	ssl_verify_client on;
}

Uma descrição detalhada de todos os parâmetros relacionados à configuração do SSL no nginx pode ser encontrada aqui - https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_client_certificate

Descreverei brevemente aqueles que me perguntei:

  • ssl_verify_client – ​​especifica que a cadeia de confiança do certificado precisa ser verificada.
  • ssl_verify_profundidade – Define a profundidade da pesquisa para o certificado raiz confiável na cadeia. Como nosso certificado de cliente é assinado imediatamente no certificado raiz, a profundidade é definida como 1. Se o certificado do usuário for assinado em uma CA intermediária, então 2 deverá ser especificado neste parâmetro e assim por diante.
  • ssl_client_certificate - especifica o caminho para o certificado raiz confiável, que é usado ao verificar a confiança no certificado do usuário.
  • ssl_certificate/ssl_certificate_key - indica o caminho para o certificado/chave privada do servidor.

Não se esqueça de executar nginx -t para verificar se não há erros de digitação na configuração e se todos os arquivos estão no lugar certo e assim por diante.

E isso é tudo! Como você pode ver, a configuração é muito simples.

Verificando se está funcionando no Firefox

Como fazemos tudo totalmente em Linux, assumiremos que nossos usuários também trabalham em Linux (se tiverem Windows, então veja instruções para configurar navegadores no artigo anterior.

  1. Vamos iniciar o Firefox.
  2. Vamos tentar fazer login sem um token primeiro. Temos esta imagem:

    Autenticação de dois fatores no site usando token USB. Agora também para Linux

  3. Ir para about: preferências # privacidade, e vamos para Dispositivos de segurança…
  4. Nós pressionamos Verpara adicionar um novo driver de dispositivo PKCS#11 e especificar o caminho para nosso librtpkcs11ecp.so.
  5. Para verificar se o certificado está visível, você pode ir para Gerenciador de Certificados. Você será solicitado a inserir seu PIN. Após a entrada correta, você pode verificar o que está na guia Seus Certificados nosso certificado do token apareceu.
  6. Agora vamos com o token. O Firefox solicita que você selecione um certificado que será selecionado para o servidor. Escolha nosso certificado.

    Autenticação de dois fatores no site usando token USB. Agora também para Linux

  7. LUCRO!

    Autenticação de dois fatores no site usando token USB. Agora também para Linux

A configuração é feita uma vez e, como você pode ver na janela de solicitação de certificado, podemos salvar nossa seleção. Depois disso, cada vez que fizermos login no portal, precisaremos apenas inserir um token e inserir o código PIN do usuário que foi especificado durante a formatação. Após essa autenticação, o servidor já sabe qual usuário efetuou login e não é mais possível criar janelas adicionais para verificação, mas permitir imediatamente que o usuário acesse sua conta pessoal.

apache

Assim como com o nginx, ninguém deverá ter problemas ao instalar o apache. Caso você não saiba como instalar este servidor web, basta utilizar a documentação oficial.

E começamos a configurar nosso HTTPS e autenticação de dois fatores:

  1. Primeiro você precisa ativar o mod_ssl:
    $ a2enmod ssl
  2. E então habilite as configurações HTTPS padrão do site:
    $ a2ensite default-ssl
  3. Agora editamos o arquivo de configuração: /etc/apache2/sites-enabled/default-ssl.conf:
        SSLEngine on
        SSLProtocol all -SSLv2
    
        SSLCertificateFile	/etc/apache2/sites-enabled/Server.crt
        SSLCertificateKeyFile /etc/apache2/sites-enabled/ServerKey.pem
    
        SSLCACertificateFile /etc/apache2/sites-enabled/CA.crt
    
        SSLVerifyClient require
        SSLVerifyDepth  10

    Como você pode ver, os nomes dos parâmetros praticamente coincidem com os nomes dos parâmetros no nginx, então não vou explicá-los. Novamente, qualquer pessoa interessada nos detalhes é bem-vinda à documentação.
    Agora reiniciamos nosso servidor:

    $ service apache2 reload
    $ service apache2 restart

  4. Como você pode ver, configurar a autenticação de dois fatores em qualquer servidor web, seja Windows ou Linux, leva no máximo uma hora. E a configuração dos navegadores leva cerca de 5 minutos. Muitas pessoas pensam que configurar e trabalhar com autenticação de dois fatores é difícil e pouco claro. Espero que nosso artigo desmascare esse mito, pelo menos um pouco.

Apenas usuários registrados podem participar da pesquisa. Entrarpor favor

Você precisa de instruções para configurar o TLS com certificados de acordo com GOST 34.10-2012:

  • Sim, TLS-GOST é muito necessário

  • Não, o ajuste com algoritmos GOST não é interessante

44 usuários votaram. 9 usuários se abstiveram.

Fonte: habr.com

Adicionar um comentário