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


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

    文件夹 & 说明

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

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

    出厂设置

    出厂设置SOPIN:rockey
    出厂设置USERPIN:1234
    出厂设置SOPIN和USERPIN连续输错重试次数:15
    中间件安装程序:PKIRedistcneps1knd_Chinese Simplified_std.exe
    管理工具:PKIUtilitiesePassNgMgr.exe
    终于用户管理工具:PKI edistePassNgMgr_EndUser.exe
    初始化工具:PKIUtilitiesPKIINITPKIInit_M32.exe
    PKIUtilitiesPKIINITPKIInit_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: omcat.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: omcat.keystore

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

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

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

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

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

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

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

    3:初始化UK
    找到以下文件夹文件,双击
    PKIUtilitiesPKIINITPKIInit_M32.exe
    PKIUtilitiesPKIINITPKIInit_M8.exe
    出现例如以下界面。按随意键回车
    这里写图片描写叙述
    稍等几秒,出现例如以下界面后初始化UK成功
    这里写图片描写叙述
    PKIInit_M8.exe : ePass1000ND PKI初始化工具,初始化8K的Token,它须要依赖liblib_x86init_eps1knd_hid.dll
    PKIInit_M32.exe: ePass1000ND PKI初始化工具,初始化32K的Token,它须要依赖liblib_x86init_eps1knd_hid.dll

    4:安装USBKEY中间件安装程序
    PKIRedistcneps1knd_Chinese Simplified_std.exe 双击按提示完毕安装。安装完毕后会又一次启动

    5:导入生成的客户端证书到USBKEY。我这里导入之前生成 admin01为例
    CDROM_CNPKIRedist 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中间件安装程序
    PKIRedistcneps1knd_Chinese Simplified_std.exe 双击按提示完毕安装,安装完毕后会又一次启动

  • 相关阅读:
    rsync
    typora 页内跳转
    shell脚本搭建redis集群
    Html
    python json模块
    Appium
    selenium+python
    jmeter+ant+jenkins接口自动化测试框架
    测试小结
    面向对向
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7229403.html
Copyright © 2020-2023  润新知