Existe um conceito comprovado de autenticação de certificado reverso do website?

5

Estamos procurando expor alguns dos nossos dados de aplicativos internos externamente por meio de um website. Os detalhes reais do site não são tão interessantes, eles serão construídos usando ASP.NET/IIS, etc., que podem ser relevantes. Com isso, estou essencialmente procurando um mecanismo para autenticar os usuários que visualizam meu site.

Isso parece trivial, um nome de usuário / senha normalmente é bom, mas eu quero mais. Agora eu li muito sobre SSL / x.509 para perceber que a CA determina que estamos bem e que o usuário pode confiar em nós. Mas eu quero confiar no usuário, eu quero que o usuário seja rejeitado se eles não tiverem as credenciais corretas.

Eu vi um sistema de banco on-line em que o banco emite um certificado que é instalado no computador dos usuários (na verdade, era baseado em smartcard). Se o site não puder descobrir / utilizar o par de chaves, você será imediatamente rejeitado!

Isso é brutal, mas necessário. Existe um mecanismo em que posso fazer o seguinte:

  1. Gerar um certificado para um usuário
  2. Emita o certificado para instalação, pode ser instalado em > 1 máquina
  3. Se o certificado deles não estiver acessível, eles terão acesso negado a todos
  4. Um esquema de nome de usuário / senha padrão é usado depois disso
  5. SSL empregado usando seu certificado quando eles estão "dentro"

Isso realmente já deve existir, por favor, me aponte na direção certa! Obrigado pela sua ajuda:)

    
por Tom 14.11.2011 / 16:59
fonte

1 resposta

3

Existe absolutamente um mecanismo para isso: HTTPS.

(Eu sei o que você está pensando - leia até o final do post antes de decidir que não é o que você quer!)

Primeiro, o HTTPS é meramente HTTP baseado em SSL, então ter uma compreensão profunda do SSL será benéfico.

Normalmente, as conexões SSL usadas na web estão relacionadas apenas à autenticação do servidor. No entanto, existe uma maneira que o servidor pode autenticar o cliente também sendo sua própria CA e emitindo um certificado para o cliente. Esse recurso foi incorporado ao protocolo SSL como uma etapa opcional no caso em que você deseja autenticação bidirecional (muito parecida com o que você está solicitando).

Aqui está uma imagem BROAD de como funciona:

  1. O cliente inicia uma conexão com o servidor solicitando seu certificado.
  2. O servidor responde enviando seu certificado de volta ao cliente. Uma parte opcional desta etapa é que o servidor também pode desafiar o cliente solicitando um certificado. A maioria dos sites não faz isso. É isso que você deseja ativar no seu site.
  3. O cliente autentica o certificado do servidor é válido usando a chave pública da CA para descriptografar o certificado (se os dados corresponderem, então sabe-se que o certificado tinha como proveniente da CA, pois a CA tem a chave privada para gerar certificados).
  4. O cliente envia uma chave simétrica ao servidor (criptografada usando uma chave pública no certificado do servidor). Se o servidor solicitou um certificado, o cliente também envia seu certificado para o servidor.
  5. O servidor autentica o cliente. Geralmente, isso ocorre pelo próprio servidor, assumindo a função de CA e determinando que o certificado realmente veio desse servidor. Esta etapa ocorre apenas se o servidor tiver desafiado o cliente.
  6. Usando a chave simétrica criptografada que o cliente enviou, o servidor determina qual será a chave simétrica e envia uma confirmação de volta ao cliente.
  7. Neste momento, o aperto de mão está concluído. Toda a correspondência adicional ocorre usando um algoritmo de criptografia de chave simétrica simples.

Agora vem a pergunta: Como o cliente obtém o certificado em primeiro lugar? Primeiro de tudo, você precisa de uma maneira segura de emitir um certificado. Você mencionou cartões inteligentes (o que pode ser bom. Um simples salto é bom também, desde que você tenha certeza de que não cairá nas mãos erradas). Se estamos falando de segurança ao nível da CIA, então não há uma resposta fácil (ou barata) de como distribuir o certificado - você terá que usar o seu próprio julgamento e fazer sua lição de casa.

Quando o usuário tiver o certificado, todos os principais sistemas operacionais terão mecanismos para instalar o certificado, de modo que o seu computador seja inteligente o suficiente para responder automaticamente com o certificado correto. Encontrar informações sobre como fazer isso não deve ser difícil (eu fiz isso antes e não me lembro de muitos problemas para encontrar informações sobre o assunto).

Infelizmente, lidei apenas com ser cliente ao trabalhar com isso, mas esses links (e qualquer outra coisa que apareça em uma pesquisa no Google por "Autenticação de cliente SSL") devem ajudá-lo:

Suponho que você já saiba que isso trará dores de cabeça para seus clientes, portanto, faça isso apenas se tiver 100% de certeza de que um login simples na Web com a criptografia HTTPS mais básica não é o que você deseja.

Boa sorte, e espero que isso ajude.

    
por 15.11.2011 / 00:25
fonte