ti-enxame.com

O navegador não está solicitando um certificado de cliente

Histórico:

Estou atualizando um aplicativo interno para um processo de autenticação em duas etapas. Quero adicionar um processo de autenticação de certificado de cliente (por meio de um cartão inteligente) em cima de um formulário tradicional de nome de usuário/senha. O aplicativo é escrito em C #, hospedado no IIS7 e direcionado Chrome e IE8.

Problema:

Estou com problemas para obter o aplicativo Solicitar ao usuário um certificado de cliente. Estou depurando o aplicativo com a ajuda do Fiddler. Quando tenho um certificado de cliente de teste salvo no diretório do usuário do Fiddler (C:\Documents and Settings\USER\Meus Documentos\Fiddler2), o aplicativo funciona conforme o esperado. É solicitado um número PIN que protege o cartão inteligente e, quando digitado corretamente, leva-me ao formulário de login. Quando fecho o Fiddler, o aplicativo gera um erro 403 Proibido) (desde que o Fiddler não está mais em execução e apontando para seu certificado.) O que não consegui descobrir é por que o aplicativo não solicita um certificado normalmente.

Configuração atual do servidor:

  • O certificado autoassinado foi criado
  • A ligação 443 está apontando para o certificado autoassinado
  • A autenticação anônima está ativada
  • O certificado autoassinado foi adicionado à CA raiz confiável e à CA intermediária (li que outra pessoa o possuía em vez de apenas na CA raiz confiável e que resolveu o problema, embora nenhuma configuração tenha funcionado para nós).
  • Limpei o restante dos certificados na CA raiz confiável que eu não precisava (li em outro lugar que ter muitos certificados faria com que o SSL bloqueasse).

Estou sem ideias para tentar, além de começar do zero em outro servidor. Alguém sabe qual pode ser o problema? Parece que deve ser bastante direto e que estou perdendo algo menor. Todas as idéias são bem-vindas.

Atualização:

Depois de passar mais tempo com esse problema hoje, acredito firmemente que ele tem a ver com o IIS7 não estar configurado corretamente (não o configurei originalmente). Acho que isso porque habilitei o Rastreamento de solicitação com falha, observei os arquivos .xml subsequentes que estavam sendo gerados e vi que um erro 500 estava sendo gerado.

O Chrome está lançando uma mensagem "Acesso negado à página da web" em vez de uma mensagem "403 - Proibido: acesso negado". Não sei se isso ajuda. Sei que, quando não faço os certificados exigidos, o site funcionará como pretendido. Exigir um certificado é onde falha.

O pool de aplicativos está definido como .Net 4.0 | Clássico | Serviço de rede.

16
LNendza

Seu problema é que o navegador não recebe a solicitação para fornecer o certificado do cliente ou existe uma opção relacionada à segurança para impedir que isso aconteça. IE oferece certificado somente se o site estiver na zona correta (intranet ou sites confiáveis). Verifique isso antes de tudo.

Se isso não ajudar, veja isso resposta para a próxima etapa. A documentação netsh diz:

clientcertnegotiation
Optional. Specifies whether the negotiation of certificate is enabled or disabled. Default is disabled.

Habilite isso e até o navegador mais idiota deve perceber que ele deve oferecer certificado para autenticação. Para diagnosticar ainda mais o seu problema, você pode usar WireShark para ver a negociação em ação.

11
user918176

Experimentar openssl s_client -connect yourip:443 -prexit E verifique se a CA (seu certificado autoassinado) é enviada ao cliente nos nomes de CA do certificado de cliente aceitável.

você precisa instalar o openssl primeiro, se não o tiver

8
Boklucius

Em todos os navegadores que eu vi, o navegador não solicitará que você selecione um certificado se ele não tiver nenhum certificado assinado por uma CA em que o servidor confia. Portanto, verifique se o servidor está configurado com as CAs corretas. Como Boklucius sugeriu, você pode usar o openssl para examinar a lista de CAs confiáveis ​​que seu servidor está enviando para clientes e verificar se a CA com a qual você assinou seus certificados de cliente está entre eles.

5
pimlottc

Para adicionar uma lição bastante dolorosa à mistura: Saia do Skype (ou de qualquer outro aplicativo) que esteja na porta 443.

Portanto, a idéia aqui é se você estiver executando um ambiente de desenvolvimento na mesma máquina (cliente e IIS) e sua equipe usar o Skype ou algum outro aplicativo para se comunicar.

Observe as horas passarem ao tentar depurar esse problema, aparentemente fazendo tudo "certo", netsh http sslcerts e tal, mesmo reiniciando, mas sem sucesso. Bem, acontece que o Skype comerá 443, então desligue-o e "puf", lá vai o seu prompt de certificado.

Então sinta-se à vontade para jogar coisas contra a parede, gritar obscenidades ou apenas "Raiva, raiva contra a morte da luz".

2
rism

Apresentarei uma sugestão "tente reiniciar o navegador", principalmente se você instalou o certificado enquanto o navegador estava em execução.

1
mwfearnley

Além disso, verifique se o Fiddler não está atrapalhando. Se você descriptografar o SSL, ele corromperá a mensagem de volta ao IE e não possui o certificado instalado, portanto não pode oferecê-lo. Desligue o violinista e pronto, o prompt do certificado será exibido.

0
Michael Blackburn