最近项目需求,需要实现用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

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
出现如下界面,按任意键回车

稍等几秒,出现如下界面后初始化UK成功

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码

可以选择修改相应的pin码
修改相应的令牌名,这里改成 admin01,便于区分导入的证书

完成后,点击左侧导航目录下的 数据管理 选项

现在我们来导入相关的客户端证书,该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”,按照提示安装证书,将证书填入到“受信任的根证书颁发机构”。

按提示安装




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双向认证访问管理后台,采用USBKEY进行系统访问的身份鉴别,KEY的证书长度大于128位,使用USBKEY登录相关推荐

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

    近期项目需求,须要实现用USBKEY识别用户登录,採用https双向认证訪问管理后台管理界面,期间碰到过一些小问题,写出来给大家參考下. 1:前期准备工作 USBKEY 硬件:我买的是飞天诚信 epa ...

  2. HTTPS双向认证配置

    最近看了下HTTPS相关的,概念性的东西各位就去查查资料吧.主要找到两篇比较靠谱的文章,收藏下. xiooa面复制自https://my.oschina.net/jjface/blog/339144 ...

  3. Apache httpd设置HTTPS双向认证

    一.环境 httpd: 2.4.4  openssl:1.0.1  os:ubuntu 12.04 LTS 二.场景 我准备在httpd上配置一个HTTPS双向认证,既向客户端表明自己的身份,也只允许 ...

  4. httpd设置HTTPS双向认证

    去年用tomcat.jboss配置过HTTPS双向认证,那时候主要用的是JDK自带的keytool工具.这次是用httpd + openssl,区别比较大 在网上搜索了很多文章,发现全面介绍的不多,或 ...

  5. TurboMail邮件系统支持HTTPS双向认证

    2019独角兽企业重金招聘Python工程师标准>>> HTTP单向认证已经被普遍应用,而对企业邮箱安全保密要求更加严格的企事业单位,例如国家保密局等单位,为了达到闭环的安全加密要求 ...

  6. 巧用 Nginx 快速实现 HTTPS 双向认证

    1.原理 双向认证,顾名思义,客户端和服务器端都需要验证对方的身份,在建立 HTTPS 连接的过程中,握手的流程比单向认证多了几步.单向认证的过程,客户端从服务器端下载服务器端公钥证书进行验证,然后建 ...

  7. Tomcat服务器配置https双向认证,使用JDK的keytool生成证书(适用于web、安卓、IOS)

    Tomcat服务器配置https双向认证,使用JDK的keytool生成证书(适用于web.安卓.IOS) 一.原理 1.HTTP:平时浏览网页时候使用的一种协议.HTTP协议传输的数据都是未加密的( ...

  8. tomcat实现https双向认证配置

    Tomcat实现https双向认证配置 1.生成证书库 2.jks转p12 3.证书库导出cer文件 4.证书库生成证书请求 5.对证书请求进行签名 6.例子 6.1创建证书库 6.2导出根证书 6. ...

  9. android webview单向认证,android 让webview支持自签名证书https 双向认证(SSL)

    最近完成一个项目,安全级别比较高.所以涉及到https双向认证,在网上找了很多资料都没有完美的解决方案.最后参考了org.sandrob.sslexample的实现方式,结合实际情况才完成该技术难题, ...

最新文章

  1. 自学python推荐书籍同时找哪些来实践-想学习Python爬虫,但是找不到电子书或者不知道找什么资料...
  2. python输入一组数字存到列表_Python如何使用输入传递多个值并将它们存储在一个列表中(简单版本),python,怎么,input,传入,储存,到...
  3. 怎样才能娶到比尔-盖茨的女儿
  4. php如何调用手机拨打电话,ionic调用手机系统的拨打电话
  5. vs2019能写Java吗_Visual studio2019打包程序过程
  6. 基于Java+SpringMvc+vue+element实现疫苗接种管理平台
  7. MyBatis四大核心概念
  8. 从用户空间直接访问系统调用
  9. matlab基于dct的图像压缩编码解码_基于深度学习的视频压缩方法简介
  10. 最强面试题整理第二弹:Python 进阶面试题(附答案)
  11. 计算机桌面点不进系统,电脑无法进入系统怎么办?
  12. c++ Beep函数的雪之梦
  13. python按指定数量划分图片与对应的xml数据(.png格式为列)
  14. mongo执行逻辑表达式_Mongo学习记录
  15. Linux系统管理上机作业2
  16. c语言malloc作用,c语言中malloc是什么?怎么用?
  17. 华为企业园区网络建设技术方案建议书
  18. 详解spring的IOC控制反转和DI依赖注入
  19. 暑假篇之每周两篇4.0(下)补充
  20. 一文教你读懂什么是移动办公oa?如何注册登录邮箱163?

热门文章

  1. [嘿就这么样吧 谁看谁的脸色]井冈春天牌演.活力果子
  2. AGC 自动增益控制
  3. java英文自我介绍3篇_java开发英文自我介绍
  4. 计算机博士英文复试自我介绍,博士复试英文自我介绍范文.doc
  5. 【STM32F429开发板用户手册】第42章 STM32F429的LTDC应用之点阵字体和字符编码(重要)
  6. 感觉到大腿内的肌肉出血,应该用绳子包扎肌肉上侧还是下侧?
  7. 射灯安装方法图解_射灯安装方法及安装注意事项介绍
  8. 笔记:模电-1.3三极管(晶体管)
  9. AutoCAD 2021 for Mac(cad2021)中文版
  10. mmrotate学习记录