近期项目需求,须要实现用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双向认证登录。所以我们生成对应的服务端客户端证书

server系统:windows8

程序 》開始》运行》cmd进入命令行

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

命令行,依次运行例如以下命令生成证书

一、为server生成证书

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”完毕导入证书步骤例如以下:

三、让server信任客户端证书

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文件导入到server的证书库

加入为一个信任证书使用命令例如以下:

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

四、让客户端信任server证书

1、把server证书导出为CER文件

keytool -keystore D:\tomcat.keystore -export -alias tomcat -file D:\tomcat.cer

2、在客户端安装server证书

双击“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,改动令牌名

首先我们须要登录,点击登录button,输入pin码,初始化为 1234。按提示出入成功后。我们能够改动pin码



能够选择改动对应的pin码

改动对应的令牌名,这里改成 admin01,便于区分导入的证书



完毕后,点击左側导航文件夹下的 数据管理 选项



如今我们来导入相关的客户端证书,该USBKEY的唯一标识



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

6:java开发代码

tomcat 的 https訪问 server.xml配置文件设置

找到凝视的这段代码,https訪问端口我设置为8443,以下加粗的地方是我们存放server的证书地址。如今配置的是Windowsserver。以Linux作为server时,不用再Linuxserver又一次命令生成server证书,能够直接把Windows上生成的server证书复制到Linuxserver上就可以,相同适用(注意改变server证书的路径)。

部署好之后,我们訪问对应的项目网网址,比方我们的项目名称是:test1

訪问的URL为:https://localhost:8443/test1

因为是https双向认证。在訪问此站点之前,我们要确认客户端是否已经安装了server证书了,

上面有提到

在客户端安装server证书

双击“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();//得到username

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,一下就自己实现了。。

备注:生成server。客户端证书时一定要细心,參数非常easy写错。

依据之前測试遇到的问题,发现仍有部分操作系统须要安装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 双向认证构建移动设备安全体系

    HTTPS 双向认证构建移动设备安全体系 对于一些高安全性要求的企业内项目,我们有时希望能够对客户端进行验证.这个时候我们可以使用Https的双向认证机制来实现这个功能. 单向认证:保证server是 ...

  2. httpd设置HTTPS双向认证

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

  3. 双向认证 HTTPS双向认证

    [微信支付]微信小程序支付开发者文档 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3 HTTPS双向认证使用说明 ...

  4. Keytool配置 Tomcat的HTTPS双向认证

    Keytool配置 Tomcat的HTTPS双向认证 证书生成 keytool 简介 Keytool是一个Java数据证书的管理工具, Keytool将密钥(key)和证书(certificates) ...

  5. Tomcat 配置 HTTPS双向认证

    Tomcat 配置 HTTPS 双向认证指引说明: � 本文档仅提供 Linux 操作系统下的指引 � 在阅读本指引前请您在 Linux 部署 JDK 和 Tomcatserver为了 Tomcat ...

  6. Https双向认证Android客户端配置

    Https .cer证书转换为BKS证书 公式https://blog.csdn.net/zww986736788/article/details/81708967 keytool -importce ...

  7. Android Https双向认证 + GRPC

    keywords:android https 双向认证android GRPC https 双向认证 ManagedChannel channel = OkHttpChannelBuilder.for ...

  8. nodejs之https双向认证

    说在前面 之前我们总结了https的相关知识,如果不懂可以看我另一篇文章:白话理解https 有关证书生成可以参考:自签证书生成 正题 今天使用nodejs来实现https双向认证 话不多说,直接进入 ...

  9. SpringBoot服务间使用自签名证书实现https双向认证

    SpringBoot服务间使用自签名证书实现https双向认证 以服务server-one和server-two之间使用RestTemplate以https调用为例 一.生成密钥 需要生成server ...

随机推荐

  1. NVIDIA NVML Driver/library version mismatch

    sudo rmmod nvidia_drm sudo rmmod nvidia_modeset sudo rmmod nvidia_uvm sudo lsof /dev/nvidia* confirm ...

  2. ACM程序设计选修课——Problem F:(ds:图)旅游规划(优先队列+SPFA)

    问题 F: (ds:图)旅游规划 时间限制: 1 Sec  内存限制: 128 MB 提交: 14  解决: 4 题目描述 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路 ...

  3. NOJ——1568走走走走走啊走(超级入门DP)

    [1568] 走走走走走啊走 时间限制: 1000 ms 内存限制: 65535 K 问题描述 菜菜赚了钱回来,想起要买很多桶回来,不同地方的桶质量是不同的,他在(1,1)点出发因为飞机票有点贵所以他 ...

  4. [UOJ#276]【清华集训2016】汽水

    [UOJ#276][清华集训2016]汽水 试题描述 牛牛来到了一个盛产汽水的国度旅行. 这个国度的地图上有 \(n\) 个城市,这些城市之间用 \(n−1\) 条道路连接,任意两个城市之间,都存在一 ...

  5. 【CCF】网络延时 树搜索

    #include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...

  6. Spring之BeanFactory与ApplicationConText区别

    使用BeanFactory从xml配置文件加载bean: import org.springframework.beans.factory.xml.XmlBeanFactory; import org ...

  7. grunt 入门 应用grunt对代码进行压缩

    1.什么是grunt grunt的官方解释是:javascript世界的构建工具. 为何要构建工具? 一句话:自动化.对于需要反复重复的任务,例如压缩(minification).编译.单元测试.li ...

  8. webRTC windows demo1(转)

    // setup video engine char cCameraName[MAX_CAMERA_NAME_LENGTH]; memset(cCameraName, , MAX_CAMERA_NAM ...

  9. 标准C程序设计七---47

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  10. 07深入理解C指针之---指针类型和长度

    该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 如果考虑到程序的可移植性和跨平台性时,指针长度就是一个问题,需要慎重处理.一般情况下, ...