Segurança · 7 min read · Jan 06, 2026
Prevenir Phishing com Autenticação Mútua
Prevenir Phishing com Autenticação Mútua
Phishing é essencialmente um ataque man-in-the-middle. O usuário é desviado, por exemplo, por engenharia social ou envenenamento de cache DNS, para um site fraudulento. Como o usuário não entende como validar certificados SSL (e quem entende?), o truque funciona com muita frequência. Esforços como certificados de Validação Estendida estão fadados ao fracasso em muitos casos porque dependem de auxílios visuais inconsistentes e não de criptografia forte. Senhas de uso único sozinhas também se mostraram vulneráveis a ataques MITM em tempo real. Para prevenir phishing de forma consistente, é necessária uma forte autenticação mútua - validando o host para o usuário e o usuário para o host.
Neste documento, configuraremos uma aplicação JSP para trabalhar com o sistema de autenticação mútua e senha de uso único de código aberto da WiKID. Veja como funcionará: quando um usuário deseja fazer login no site de destino, ele inicia o cliente de token WiKID e insere seu PIN. O PIN é criptografado pela chave pública do servidor e enviado ao servidor. Se o PIN estiver correto, a criptografia válida e a conta ativa, um pacote do OTP, a URL do site de destino e um hash do certificado SSL do site de destino são enviados ao cliente de token. O cliente de token se conecta pela conexão de internet do usuário à URL do site de destino e obtém o certificado SSL, o hash e o compara com o hash do certificado validado. Se os dois hashes coincidirem, o cliente de token apresenta o OTP e (em plataformas suportadas) inicia o navegador padrão para o site para o usuário.
Primeiro, adicionaremos um domínio no servidor WiKID para a aplicação, depois criaremos um cliente de rede para a página JSP. Adicionaremos o código de login para WiKID à página JSP e, em seguida, testaremos a partir de um cliente de token.
Adicionando um domínio ao servidor WiKID
Isso é bastante fácil. A partir da interface de administração web do servidor WiKID, clique na aba Domínios e Criar Novo Domínio. Insira um nome de domínio para o gateway e um nome de dispositivo. O nome do dispositivo aparecerá no token WiKID. Na caixa URL Registrada, coloque a URL da página JSP para o servidor de destino. Quando o domínio for criado, o servidor WiKID buscará o certificado do servidor web, então certifique-se de que você insira ‘https:’. O código do servidor será o endereço IP do servidor WiKID, com zero à esquerda (por exemplo, 10.1.1.1 = 010001001001). Defina os outros parâmetros como achar melhor. Embora um PIN mais longo possa aumentar a segurança matematicamente, um PIN de quatro dígitos pode ser melhor: se um usuário usar seu PIN de caixa eletrônico, é mais provável que o proteja.

Criar um cliente de rede
Após salvar as informações do domínio, clique na aba Cliente de Rede e Criar Novo Cliente de Rede. Insira um nome para este cliente e o endereço IP do servidor de destino na rede interna. Selecione wAuth como o protocolo e, em seguida, escolha o domínio que você criou acima.

Clique em Adicionar para ir para a próxima página e insira as informações para o certificado p12 do servidor de destino. As comunicações entre o servidor JSP e o servidor WiKID serão criptografadas com SSL usando este arquivo p12. Insira uma frase secreta para este arquivo p12 duas vezes e a frase secreta que você usou para o certificado do servidor durante o processo de configuração. Quando você retornar à página Cliente de Rede, verá o novo cliente de rede listado e um link para baixar o arquivo p12. Baixe o arquivo p12 e coloque-o no seu servidor JSP no mesmo diretório que seu código JSP.

Configurando suas páginas JSP
No seu servidor JSP, você precisa do arquivo p12 criado no servidor WiKID, do arquivo jar do cliente de rede Java WiKID (Wikid.jar), que está disponível em nosso site ou em nosso site do Sourceforge, e da sua página JSP. Além disso, você precisa estar executando a versão do Java 1.4.2_06 ou posterior. Cada pacote de cliente de rede inclui uma página de exemplo. Aqui, estaremos editando a página example.jsp. Esta página também inclui código para adicionar novos usuários programaticamente.
Abra sua página JSP em seu editor favorito:
Primeiro, importe o cliente WiKID:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="com.wikidsystems.client.*" %> Esta seção instancia a conexão entre a aplicação cliente de rede e o servidor WiKID. Para que isso tenha sucesso, o cliente de rede deve ter recebido um certificado do servidor WiKID. O certificado está contido em um armazenamento de certificado PKCS12 e requer uma frase secreta para acesso. O caStore é um Java Keystore que contém os certificados dos servidores WiKID aos quais você se conectará com este cliente. Você pode copiá-lo do WAS como /opt/WiKID/private/CACertStore. A caStorePass é a frase secreta para abrir o caStore.
Quando o objeto wClient é instanciado, ele carregará o cert e estabelecerá uma conexão SSL autenticada persistente. Isso normalmente é feito uma vez por servidor ou aplicação e compartilhado por múltiplas threads. Neste exemplo, o objeto é criado e destruído a cada solicitação de página. Isso aumenta muito (1000 vezes) a sobrecarga do processo, mas permite que todas as funções sejam mostradas nesta única página de exemplo.
Os parâmetros são:
- wClient(String host, int port, String keyfile, String pass)
- host = endereço IP do servidor WIKID
- port = número da porta TCP para se conectar (padrão 8388)
- keyfile = Caminho para o arquivo de certificado PKCS12
- pass = Frase secreta para abrir o arquivo PKCS12
- caStore - O armazenamento da autoridade certificadora para validar o certificado do servidor WAS, baixe isso do servidor WiKID (opt/WiKID/private/CACertStore <– NÃO USE o arquivo cacerts do Java
- caStorePass - A frase secreta que protege o arquivo caStore
<% String status="";
String chall="";
wClient wc = new wClient("192.168.0.1",
8388,
"/opt/tomcat/webapps/example/Token_test_client.p12",
"yourpassphrase",
"/opt/tomcat/webapps/example/CACertStore",
"yourpassphrase");
%> Login Online
Esta função é o login em estado normal para os usuários. Isso é chamado quando o dispositivo dos usuários está conectado à rede e capaz de solicitar diretamente um código de acesso.
Os parâmetros são:
- CheckCredentials(String user, String passcode, String servercode)
- user = userid para validar credenciais
- passcode = código de uso único limitado no tempo
- servercode = código de 12 dígitos criado no servidor WiKID, neste caso 333344445555
Este método retorna um booleano representando autenticação bem-sucedida ou malsucedida
<%
boolean isValid = false;
if(request.getParameter("action") != null && request.getParameter("action").equalsIgnoreCase("Check Online")){
isValid = wc.CheckCredentials(request.getParameter("user"), request.getParameter("passcode"), request.getParameter("servercode"));
if (isValid){
status="Success";
} else {
status="Falha na Autenticação";
}
}
%> E aqui está o HTML para o formulário:
Login Online:
Testando com o Cliente de Token
Se você ainda não o fez, pode baixar uma cópia do cliente de token de código aberto WiKID. Inicie o token com ‘run.sh’ ou ‘run.bat’, dependendo da sua plataforma. A primeira vez que você iniciar o cliente de token, precisará criar uma frase secreta. Uma vez iniciado, selecione Ações e Criar Novo Domínio

Insira o identificador de domínio de 12 dígitos e a chave pública será enviada ao servidor WiKID. Você será solicitado a inserir um PIN.

O servidor WiKID armazenará o PIN e retornará um código de registro.

Neste ponto, a conta foi criada no servidor WiKID, mas não está ativa. Você pode criar páginas de registro de autoatendimento para usuários com base em credenciais confiáveis existentes ou mecanismos fora de banda, mas neste caso, validaremos manualmente o usuário no servidor WiKID. A partir da interface web do WiKIDAdmin, clique em Usuários e Validar um Usuário Manualmente. Clique no Código de Registro e insira um nome de usuário.

Agora, a partir do cliente de token, selecione o domínio que você criou e insira seu PIN. Você deve receber o código de acesso de uso único de volta (e ele deve ser copiado para sua área de transferência) e seu navegador deve ser iniciado na URL Registrada.
Ao combinar códigos de acesso de uso único para autenticação de usuários com validação embutida do certificado do host e lançamento automático do navegador, criamos um sistema que é fácil para o usuário, mas criptograficamente sólido. O cliente de token é capaz de lidar com múltiplos relacionamentos de domínio sem redução de segurança, graças ao uso de criptografia de chave pública, e o servidor é capaz de gerenciar múltiplos relacionamentos de cliente de rede. Exemplos adicionais de clientes de rede estão disponíveis para Ruby, PHP, Python e ASP/COM/.NET. Apache ou IIS podem ser configurados usando Radius ou LDAP também.
Você pode testar esse processo (anonimamente) em http://www.wikidsystems.com/signup/example.jsp
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.