Pergunta

Existe uma maneira de um aplicativo da Web Java obter informações sobre os certificados de segurança instalados na máquina por meio de uma solicitação HTTP e conceder acesso seletivamente se um certificado específico estiver instalado na máquina.

Basicamente, o requisito é que o aplicativo da web deve entreter a solicitação apenas de um laptop da empresa, caso contrário, deve negar o acesso com o texto de erro apropriado.

(Estes podem ser laptops com certos certificados instalados em sua máquina ou podem ser de um determinado conjunto de IPs estáticos.)

Foi útil?

Solução

Sim, isso é possível usando certificados de cliente HTTPS. A configuração e configuração exatas depende do seu servidor de aplicativos e dos requisitos específicos, mas um cenário comum será que você cria uma empresa interna (autoridade de certificação) para emitir os certificados de clientes que podem ser restritos a endereços IP do cliente específicos e configurar o seu servidor de aplicativos O HTTPS Connector para exigir um certificado de cliente e para os certificados de confiança emitidos por sua própria ca.

Após a configuração adequada, o (s) certificado (s) do cliente é/é disponibilizado ao aplicativo da Web por meio de um atributo de solicitação de servlet:

X509Certificate[] certificates = (X509Certificate[])
    request.getAttribute("javax.servlet.request.X509Certificate");

Outras dicas

Como Jambjo disse - você pode absolutamente obter certificados de clientes por meio de HTTPs com autenticação do cliente, como ele descreveu. Eu recomendo que, por IPS estáticos, seja mais difícil de falsificar um certificado e permita mais flexibilidade se você precisar reconfigurar a rede de maneira diferente no futuro.

Alguns outros pensamentos:

  • Quase qualquer servidor de aplicativos permitirá que você defina um armazenamento de certificados confiável - a lista de certificados de CA que seu aplicativo aceitará para o HTTPS Client Auth. Limite isso à CA que está fornecendo certificados de clientes - uma empresa interna CA ou um fornecedor de certificados.
  • A escolha do fornecedor interno de CA ou CA é corporativo. Uma CA interna aceitará mão de obra para configurar e manter, um provedor da CA custará dinheiro por certificado. Lá atinge um ponto de troca em que é mais barato fazer os certificados, mas até você atingir esse ponto, o provedor da CA pode ser mais barato.
  • Se você tem uma CA interna e sua regra é que "qualquer máquina da empresa (com um certificado) pode acessar este aplicativo", seu trabalho é feito na lista de CA confiável no servidor Applicoiton, já que você sabe que a empresa CA não será usado para qualquer pessoa, exceto pessoas na empresa.
  • Se você possui um provedor de CA, pode ser necessário limitar ainda mais seu controle de acesso e usar o código Jambjo fornecido para obter o certificado e observar as informações nele. Normalmente, existe um componente organização (O) e unidade organizacional (OU) no DN de assunto (nome distinto) que informará qual organização produziu esse certificado. Você poderá verificar isso para ter certeza de ter um computador da empresa.
  • É viável fazer a verificação O e OU, se você souber que seu provedor de CA nunca distribuirá os nomes O e UO da sua empresa a ninguém, exceto um membro da sua empresa. Se não for esse o caso, pode ser necessário verificar em um armazenamento de dados de back end (como um diretório LDAP) para garantir que a máquina do usuário ou do usuário seja conhecida por você.
  • Também é possível vincular o endereço IP da máquina ao certificado - geralmente sujeito o nome (nome alternativo do sujeito) é usado para isso quando o certificado está sendo construído. Eu não recomendaria, porque você precisará de um novo certificado se alterar o endereço IP da máquina. Parece desnecessariamente complexo para seus propósitos.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top