https双向认证访问管理后台,采用USBKEY进行系统访问的身份鉴别,KEY的证书长度大于128位,使用USBKEY登录

最近项目需求,需要实现用USBKEY识别用户登录,采用https双向认证访问管理后台管理界面,期间碰到过一些小问题,写出来给大家参考下。
1:前期准备工作
USBKEY 硬件:我买的是飞天诚信 epass1000ND
若干个(一个USBKEY绑定一个用户,等同于我们的银行U盾识别一样)
USBKEY开发资料:CDROM_CN\PKI,找到该开发目录(跟厂家买硬件时一并给的开发包)
里面包含的文件如下
======================================================

目录 & 说明

Include: 包含了ePass1000ND PKI接口开发以及示例程序中用到的头文件;
Lib : 包含了ePass1000ND PKI接口开发以及示例程序中用到的库文件;
Redist : 可由分发商再次分发的文件;
Samples : 示例程序;
Utilities:工具集;

======================================================

出厂设置

出厂设置SOPIN:rockey
出厂设置USERPIN:1234
出厂设置SOPIN和USERPIN连续输错重试次数:15
中间件安装程序:PKI\Redist\cn\eps1knd_Chinese Simplified_std.exe
管理工具:PKI\Utilities\ePassNgMgr.exe
最终用户管理工具:PKI\redist\ePassNgMgr_EndUser.exe
初始化工具:PKI\Utilities\PKIINIT\PKIInit_M32.exe
PKI\Utilities\PKIINIT\PKIInit_M8.exe

https双向认证访问管理后台,采用USBKEY进行系统访问的身份鉴别,KEY的证书长度大于128位,使用USBKEY登录_第1张图片

2:生成相关证书
由于是https双向认证登录,所以我们生成相应的服务端客户端证书
服务器系统:windows8
程序 》开始》运行》cmd进入命令行

我这里举例生成一个服务器证书 tomcat ,5个客户端证书,相当5个用户:admin,admin01,admin02,admin03,admin04

命令行,依次执行如下命令生成证书
一、为服务器生成证书
keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\tomcat.keystore -validity 36500

二、为客户端生成证书
1、生成客户端证书
keytool -genkey -v -alias admin -keyalg RSA -storetype PKCS12 -keystore D:\client.key.p12
keytool -genkey -v -alias admin01 -keyalg RSA -storetype PKCS12 -keystore D:\client01.key.p12
keytool -genkey -v -alias admin02 -keyalg RSA -storetype PKCS12 -keystore D:\client02.key.p12
keytool -genkey -v -alias admin03 -keyalg RSA -storetype PKCS12 -keystore D:\client03.key.p12
keytool -genkey -v -alias admin04 -keyalg RSA -storetype PKCS12 -keystore D:\client04.key.p12
2、安装客户端证书
双击客户端证书“client.key.p12”完成导入证书过程如下:

三、让服务器信任客户端证书
1、将客户端证书导出为CER文件
keytool -export -alias admin -keystore D:\client.key.p12 -storetype PKCS12 -storepass 012345 -rfc -file D:\client.key.cer

keytool -export -alias admin01 -keystore D:\client01.key.p12 -storetype PKCS12 -storepass 012345 -rfc -file D:\client01.key.cer

keytool -export -alias admin02 -keystore D:\client02.key.p12 -storetype PKCS12 -storepass 012345 -rfc -file D:\client02.key.cer

keytool -export -alias admin03 -keystore D:\client03.key.p12 -storetype PKCS12 -storepass 012345 -rfc -file D:\client03.key.cer

keytool -export -alias admin04 -keystore D:\client04.key.p12 -storetype PKCS12 -storepass 012345 -rfc -file D:\client04.key.cer

2、将CER文件导入到服务器的证书库
添加为一个信任证书使用命令如下:
keytool -import -alias admin -v -file D:\client.key.cer -keystore D:\tomcat.keystore

keytool -import -alias admin01 -v -file D:\client01.key.cer -keystore D:\tomcat.keystore

keytool -import -alias admin02 -v -file D:\client02.key.cer -keystore D:\tomcat.keystore

keytool -import -alias admin03 -v -file D:\client03.key.cer -keystore D:\tomcat.keystore

keytool -import -alias admin04 -v -file D:\client04.key.cer -keystore D:\tomcat.keystore

3、检查安装结果
keytool -list -keystore D:\tomcat.keystore

四、让客户端信任服务器证书
1、把服务器证书导出为CER文件
keytool -keystore D:\tomcat.keystore -export -alias tomcat -file D:\tomcat.cer

2、在客户端安装服务器证书
双击“tomcat.cer”,按照提示安装证书,将证书填入到“受信任的根证书颁发机构”。

3:初始化UK
找到以下目录文件,双击
PKI\Utilities\PKIINIT\PKIInit_M32.exe
PKI\Utilities\PKIINIT\PKIInit_M8.exe
出现如下界面,按任意键回车
https双向认证访问管理后台,采用USBKEY进行系统访问的身份鉴别,KEY的证书长度大于128位,使用USBKEY登录_第2张图片
稍等几秒,出现如下界面后初始化UK成功
https双向认证访问管理后台,采用USBKEY进行系统访问的身份鉴别,KEY的证书长度大于128位,使用USBKEY登录_第3张图片
PKIInit_M8.exe : ePass1000ND PKI初始化工具,初始化8K的Token,它需要依赖lib\lib_x86\init_eps1knd_hid.dll
PKIInit_M32.exe: ePass1000ND PKI初始化工具,初始化32K的Token,它需要依赖lib\lib_x86\init_eps1knd_hid.dll

4:安装USBKEY中间件安装程序
PKI\Redist\cn\eps1knd_Chinese Simplified_std.exe 双击按提示完成安装,安装完成后会重新启动

5:导入生成的客户端证书到USBKEY,我这里导入之前生成 admin01为例
CDROM_CN\PKI\Redist\ ePassNgMgr_EndUser.exe 双击文件

我们可以看到,已经识别到有UK插入电脑 FT HID VSCR 2[epass Token] 状态显示卡片已插入且可以使用,如果没有此状态显示,可能原因是,没有安装中间件安装程序,或者是USBKEY初始化没有成功。
点击展开识别到的USBKEY
可以执行相关的操作:登录,修改用户pin,修改令牌名
首先我们需要登录,点击登录按钮,输入pin码,初始化为 1234,按提示出入成功后,我们可以修改pin码
https双向认证访问管理后台,采用USBKEY进行系统访问的身份鉴别,KEY的证书长度大于128位,使用USBKEY登录_第4张图片
可以选择修改相应的pin码
修改相应的令牌名,这里改成 admin01,便于区分导入的证书
https双向认证访问管理后台,采用USBKEY进行系统访问的身份鉴别,KEY的证书长度大于128位,使用USBKEY登录_第5张图片
完成后,点击左侧导航目录下的 数据管理 选项
https双向认证访问管理后台,采用USBKEY进行系统访问的身份鉴别,KEY的证书长度大于128位,使用USBKEY登录_第6张图片
现在我们来导入相关的客户端证书,该USBKEY的唯一标识

选择之前我们存放在D盘的客户端证书client01.key.p12,输入刚才生成证书时设置的密码,点击确定,证书就导入到USBKEY中了。然后我们就可以写JAVA代码做开发工作了。

6:java开发代码
tomcat 的 https访问 server.xml配置文件设置
找到注释的这段代码,https访问端口我设置为8443,下面加粗的地方是我们存放服务器的证书地址。现在配置的是Windows服务器,以Linux作为服务器时,不用再Linux服务器重新命令生成服务器证书,可以直接把Windows上生成的服务器证书拷贝到Linux服务器上即可,同样适用(注意改变服务器证书的路径)。

部署好之后,我们访问相应的项目网网址,比如我们的项目名称是:test1
访问的URL为:https://localhost:8443/test1
由于是https双向认证,在访问此网站之前,我们要确认客户端是否已经安装了服务器证书了,

上面有提到
在客户端安装服务器证书
双击“tomcat.cer”,按照提示安装证书,将证书填入到“受信任的根证书颁发机构”。

按提示安装

https双向认证访问管理后台,采用USBKEY进行系统访问的身份鉴别,KEY的证书长度大于128位,使用USBKEY登录_第7张图片

https双向认证访问管理后台,采用USBKEY进行系统访问的身份鉴别,KEY的证书长度大于128位,使用USBKEY登录_第8张图片
https双向认证访问管理后台,采用USBKEY进行系统访问的身份鉴别,KEY的证书长度大于128位,使用USBKEY登录_第9张图片

6:java代码块实现
import java.security.cert.X509Certificate;

X509Certificate[] ca=(X509Certificate[])ServletActionContext.getRequest().getAttribute(“javax.servlet.request.X509Certificate”);//获取插入的USBKEY写入的客户端证书信息,我们刚才写入的是 admin01
if(ca==null)
{
log.info(“登录失败:无法获取数字证书信息”);
}else{
boolean pass=false;
for(int i=0.;i++){//这行有点小问题
X509Certificate x509certificate = ca[i];
String userid = x509certificate.getSubjectDN().getName();//得到用户名
int pos1 = userid.indexOf(“=”);
int pos2 = userid.indexOf(“,”);
userid = userid.substring(pos1+1,pos2);
java.util.Date bgn = x509certificate.getNotBefore();//得到数字证书的有效日期
java.util.Date end = x509certificate.getNotAfter();
java.util.Date now = new java.util.Date();
if(now.after(bgn) && now.before(end)){
pass = true;//证书验证成功
}
}
if(pass==true){//执行相关的业务逻辑操作
}

userid 就是我们读取到的USBKEY客户端证书信息,这样你就可以去做相关的业务实现操作了。

访问的URL为:https://localhost:8443/test1,一下就自己实现了。。。。。

备注:生成服务器,客户端证书时一定要细心,参数很容易写错。
根据之前测试遇到的问题,发现仍有部分操作系统需要安装USBKEY驱动才能正确识别USBKEY设备,
如果USBKEY插入有图下的提示:key 已插入,说明该系统已经安装此驱动,或该系统已经免驱安装,则不用安装此USBkey驱动了。(备注:windows 7需要安装 ;Windows8不需要安装)

否则执行上面的步骤
4:安装USBKEY中间件安装程序
PKI\Redist\cn\eps1knd_Chinese Simplified_std.exe 双击按提示完成安装,安装完成后会重新启动

你可能感兴趣的:(HTTPS双向认证,epass1000,飞天诚信,USBKEY登录,java后台登录)