使用相互验证防止网上诱骗

防止互相认证的网络钓鱼

网络钓鱼本质上是一个中间人的攻击。 用户被误导,例如通过社会工程或DNS Cache Poison到Cheat网站。 因为用户不了解如何验证SSL证书(以及谁是?),这个伎俩的工作太频繁了。 在许多情况下,扩展验证证书等努力势必失败,因为它们依赖于不一致的视觉辅助而不是强密码。 一次性密码也被证明是易受到实时的MITM攻击。 为了防止网络钓鱼一直要求强烈的相互认证 - 将主机验证给用户和用户到主机。

在本文档中,我们将配置一个JSP应用程序来使用WiKID的开源一次性密码和相互认证系统 。 以下是它的工作原理:当用户想要登录到目标站点时,他们启动WiKID令牌客户端并输入他们的PIN。 PIN由服务器的公钥加密并发送到服务器。 如果PIN正确,加密有效和帐户活动,OTP包,目标站点URL和目标站点的SSL证书的散列发送到令牌客户端。 令牌客户端通过用户的互联网连接到目标站点URL,并获取SSL证书,将其进行散列,并将其与验证的证书哈希进行比较。 如果两个哈希匹配,则令牌客户端显示OTP,并且(在受支持的平台上)将启动用户的站点的默认浏览器。

首先,我们将在应用程序的WiKID服务器上添加一个域,然后我们将为JSP页面创建一个网络客户端。 我们将将WiKID的登录代码添加到JSP页面,然后我们将从令牌客户端进行测试。

将域添加到WiKID服务器

这很容易 从WiKID服务器Web管理界面,单击“ ”选项卡和“ 创建新域” 。 输入网关的域名和设备名称。 设备名称将显示在WiKID令牌上。 在“注册的URL”框中,放置目标服务器的JSP页面的URL。 创建域后,WiKID服务器将从Web服务器获取证书,因此请确保输入“https:”。 服务器代码将是WiKID服务器的可路由,零填充IP地址(例如10.1.1.1 = 010001001001)。 设置您认为合适的其他参数。 虽然较长的PIN可能会以数学方式提高安全性,但是四位数的PIN可能更好:如果用户使用自己的ATM PIN,则更有可能保护它。

创建一个网络客户端

保存域信息后,单击网络客户端选项卡和创建新的网络客户端 。 输入此客户端的名称和内部网络上目标服务器的IP地址。 选择wAuth作为协议,然后选择您上面创建的域。

单击添加以获取下一页,并输入目标服务器的p12证书信息。 JSP服务器和WiKID服务器之间的通信将使用此p12文件通过SSL加密。 为此p12文件输入两次口令,以及在配置过程中用于服务器证书的密码。 当您返回网络客户端页面时,您将看到列出的新网络客户端和下载p12文件的链接。 下载p12文件并放在与JSP代码相同的目录中的JSP服务器上。

配置JSP页面

在您的JSP服务器上,您需要在WiKID服务器上创建的p12文件,WiKID java网络客户端jar(Wikid.jar)文件,可从我们 的网站Sourceforge站点上获得 ,以及您的JSP页面。 此外,您需要运行Java版本1.4.2_06或更高版本。 每个网络客户端软件包都包含一个示例页面。 在这里,我们将编辑example.jsp页面 。 此页面还包括以编程方式添加新用户的代码。

在您喜欢的编辑器中打开您的JSP页面:

首先,导入WiKID客户端:

<%@ page contentType="text/html; charset=UTF-8" %> 
<%@ page import="com.wikidsystems.client.*" %>

本节实例化网络客户端应用程序和WiKID服务器之间的连接。 为了成功,网络客户端必须已经从WiKID服务器发出证书。 该证书包含一个PKCS12证书存储,并需要密码才能访问。 caStore是一个Java密钥库,其中包含您将与此客户端连接的WiKID服务器的证书。 您可以将其从WAS复制为/ opt / WiKID / private / CACertStore。 caStorePass是打开caStore的密码。

当wClient对象被实例化时,它将加载证书并建立持久认证的SSL连接。 通常每个服务器或应用程序执行一次,并由多个线程共享。 在此示例中,对象被创建并销毁每个页面请求。 这大大(1000次)增加了进程的开销,但允许所有功能都显示在这个单一的示例页面中。

参数是:

  • wClient(String host,int port,String keyfile,String pass)
  • host = WIKID服务器的IP地址
  • port =要连接的TCP端口号(默认为8388)
  • keyfile = PKCS12证书文件的路径
  • pass = Passphrase打开PKCS12文件
  • caStore - 用于验证WAS服务器证书的证书颁发机构存储,从WiKID服务器下载(opt / WiKID / private / CACertStore < - 不要使用Java的cacerts文件
  • caStorePass - 保护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");
%>
在线登录

此功能是用户的正常状态登录。 当用户设备连接到网络并且能够直接请求用于访问的密码时,这被称为。

参数是:

  • CheckCredentials(String user,String passcode,String servercode)
  • user = userid来验证凭据
  • 密码=时间限制,1使用密码
  • servercode =在WiKID服务器上创建的12位代码,在这种情况下为333344445555
此方法返回一个表示成功或不成功身份验证的布尔值
<% 
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="Authentication Failed";
}
}
%>

以下是表单的HTML:

<!-- Online Login -->
<h2>Online Login:</h2><form action="./example.jsp" method="POST" >
UserID: <input type="text" size="25" name="user" value=""/><br />
Passcode: <input type="text" size="12" name="passcode" value=""/><br />
Domain code: <input type="text" size="16" name="servercode" value="127000000001"/><p></p>
<input type="submit" name="action" value="Check Online"><br />

使用令牌客户端进行测试

如果还没有,您可以下载WiKID开源令牌客户端的副本。 根据您的平台,使用'run.sh'或'run.bat'启动令牌。 首次启动令牌客户端时,您需要创建密码。 一旦启动,选择操作创建新的域

输入12位域标识符,公钥将发送到WiKID服务器。 系统将提示您输入PIN。

WiKID服务器将存储PIN并返回注册码。

此时,该帐户已经在WiKID服务器上创建,但它没有激活。 您可以根据现有的信任凭证或外界机制为用户创建自助服务注册页面,但在这种情况下,我们将手动验证WiKID服务器上的用户。 从WiKIDAdmin Web界面,单击用户手动验证用户 。 单击注册码并输入用户名。

现在,从令牌客户端,选择您创建的域并输入您的PIN。 您应该获得一次性密码(应该被复制到剪贴板),您的浏览器应该启动到注册的URL。

通过将用户身份验证的一次性密码与主机证书的内置验证和浏览器的自动启动相结合,我们创建了一个易于使用的系统,但密码很好。 令牌客户端能够处理多个域关系,而不会因为使用公共密钥加密而降低安全性,并且服务器能够管理多个网络客户端关系。 其他网络客户端示例可用于Ruby,PHP,Python和ASP / COM / .NET。 也可以使用Radius或LDAP配置Apache或IIS。

您可以在http://www.wikidsystems.com/signup/example.jsp测试此过程(匿名)

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏