最近在尝试用智能卡做身份验证,以飞天诚信的ePass3000为例。

1、网络环境搭建:

用3台虚机+1台实体机搭一个单独的测试网段:172.16.188.x,如下:

机器名 IP 操作系统 作用
dom 172.16.188.1 win server 2008 R2/虚机 AD域服务器、AD证书服务器、IIS服务器
ter 172.16.188.10 win server 2008 R2/虚机 远程桌面服务器(也就是以前的终端服务器)
win7 172.16.188.100 win7/虚机 模拟win7客户端
xp 172.16.188.101 win xp sp3/实体机 模拟xp客户端

2、配置证书服务器

1)进入dom,先添加Active Directory域服务、Web服务器(IIS),再添加Active Directory证书服务,这样会在IIS中建立一个CertSrv网站,用于证书申请和发放。添加证书服务时,会生成一个CA根证书比如secret-DOM-CA,后续所有的证书都由这个证书颁布。

2)管理证书模板:打开管理工具->证书颁发机构->证书模板,右键点击“管理”。在弹出的”证书模板控制台”中,修改“智能卡登录”和“智能卡用户”右键属性->安全选项卡->添加Domain Users的允许读取+注册。也可以通过复制现有模板创建新的证书模板。

3)颁发证书模板:打开管理工具->证书颁发机构->证书模板,右键点击“新建”->要颁发的证书模板,选择“智能卡登录”和“智能卡用户”,确定。

4)修改CA属性:打开管理工具->证书颁发机构->CA名字(如secret-DOM-CA),右键属性->安全,添加Domain Users的允许读取+请求证书。

3、配置IIS服务器

1)添加https支持:打开管理工具->Internet信息服务(IIS)管理器->Default Web Site->右键“编辑绑定”。默认是同时支持http+https的,如果没有,手动添加https,SSL证书选择一个即可,例如dom.secret.company.com。

2)添加CertSrv身份验证:因为以某个用户登录CertSrv并提交申请,就会生成该用户的证书,所以要去掉匿名身份验证,并添加基本+摘要式身份验证。点击CertSrv网站->身份验证,做相应的禁用/启用即可。

3)如果不绑定SSL,会报“为了完成证书注册,必须将CA的网站配置为使用https身份验证”。

4、配置域环境

1)加域:另外3台机器改成上述名字并加入secret.company.com域,重启之后就入域了。这时管理工具->Active Directory用户和计算机->Computers里会出现加入域的机器,分别是ter、win7、xp。

2)加域用户:管理工具->Active Directory用户和计算机->Users里添加用户test。

3)安装ePass3000:所有机器都安装ePass3000驱动,注意勾选“支持智能卡登录操作系统或者VPN”,据说只需要在提交申请的机器上安装即可。

5、申请证书

1)登录CertSrv:在任何一台安装了ePass驱动的机器上,打开IE输入https://dom.secret.company.com/certsrv(注:如果直接输IP地址172.16.188.1在IE8及以上版本会报“此网站的安全证书有问题”,这是因为证书标识的是域名、而不是IP,如果绑定时生成一个标识IP的证书,那么输IP地址就不会报了),使用test用户登录。

2)申请证书:在插入ePass3000的情况下,点击申请证书->高级证书申请->创建并向此CA提交一个申请,首次使用要安装插件CertEnrollCtrl。这时证书模板下拉框里应该有“智能卡用户”和“智能卡登录”这两项了,默认只有用户+基本EFS,如果只有这2项,或者干脆1项都没有,并且报“找不到任何证书模板。您没有从该CA申请证书的权限或者在访问Active Directory时发生错误”的话,请参照“2、配置证书服务器”。CSP下拉框里应该有“FEITIAN ePassNG RSA Cryptographic Service Provider”,如果没有,说明这台机器上ePass的驱动安装有问题,比如我在Server 2008 R2上就怎么也出不来这一项。

3)安装证书:点击提交,ePass开始生成密钥对。下一个页面,点击“安装证书”,ePass开始生成X.509证书。使用ePass的管理工具ePassNgMgr.exe,可以清楚的看到usb里已经存放了test用户的证书和密钥对了。

6、Smart Card登录windows

在windows登录界面插入智能卡,输入pin码,即可以test的域用户身份登录。这里有2个小问题:

1)如果输入pin码后报验证无效,请尝试安装CA根证书,即把CA的根证书加入当前机器的“受信任的根证书颁发机构”。

2)如果usb里存有多个证书,window登录时只会取第一个,而浏览器(IE8+、chrome、firefox等)一般都会提示你选择其中一个。

7、Smart Card登录远程桌面

1)先插入智能卡,如果连的是xp,输好IP点击连接时就会直接让你输pin码,如果是连win7+,会有3种方式让你选择,选择第3项智能卡登录即可。

2)可能会报“智能卡错误:卡所需要的驱动器不在系统上”:这个问题还没有完全解决,目前连xp是OK的,但连win7+Server 2008 R2都报这个错。我理解应该是远程机器上的ePass驱动没有安装正确,但是通过正常登录远程桌面后发现智能卡倒是正确映射过去了。

  • 但是在访问CertSrv->高级证书申请时,CSP里确实没有“FEITIAN ePassNG RSA Cryptographic Service Provider”。
  • 这篇《How to find CSP currently installed on a computer》指出了本机所有CSP在注册表里的位置,如果手工把xp里的Feitian CSP注册表项导入到目标机器,再次打开CertSrv->高级证书申请页面时,CSP下拉框里有了Feitian,但选择后报“您可能选择了一个不支持在模板中定义的密钥类型的CSP。请在模板中更改密钥类别,或者选择一个不同的CSP或证书模板。”,看来似乎还是驱动没能正确安装+注册,呵呵,这点存疑!

3)ePass安装问题:有可能安装后报“Initialize PKCS#11 Library Failed, 0x0000 0030”,打开services.msc发现关键服务ngSlotD没有创建或没能启动。可自行创建:

 sc create ngslotd binPath= "%ProgramFiles%\ngsrv\ngslotd.exe" start= auto depend= ScardSvr
sc start ngslotd

4)允许远程桌面:默认的域策略似乎不允许远程桌面。域服务器->管理工具->组策略管理->组策略对象->Default Domain Policy->右键编辑,打开组策略管理编辑器。

  • 计算机配置->策略->windows设置->安全设置->本地策略->用户权限分配->允许通过远程桌面服务登录里,添加Domain Users、Remote Desktop Users等相关组。
  • 计算机配置->策略->管理模板->windows组件->远程桌面服务->远程桌面会话主机->连接->允许用户使用远程桌面服务进行远程连接,改为已启用。
  • 如果上述设置都无效,可以在目标机器->右键我的电脑->属性->远程->选择用户...里添加Domain Users、Remote Desktop Users等相关组。

8、引用

1)《Smart Card Logon And Authentication

2)《USB eToken for Windows domain user RDP Authentication

3)《How to find CSP currently installed on a computer

飞天诚信usb-key登录windows+远程桌面的更多相关文章

  1. 重复登录Windows远程桌面-Autoit脚本

    非常抱歉,我先临时把脚本放上来,具体的说明有时间再更新: 都是做成快捷方式,用鼠标点击的操作 #include <AutoItConstants.au3> ; Open mstsc pro ...

  2. Windows远程桌面,连接被拒绝,因为没有授权此用户帐户进行远程登录。

    Windows 服务器远程连接的时候,出现错误:“连接被拒绝,因为没有授权此用户帐户进行远程登录.”,导致无法远程登录服务器,如下图所示: 问题分析 该错误一般是由于 Windows 远程桌面相关权限 ...

  3. Windows远程桌面连接Mac OS X

    Windows远程桌面连接Mac OS X   第一步:Mac OS X 10.5 已经增加支持了由VNC Viewer访问的功能,设置如下:   系统偏好设置-共享-勾选“屏幕共享”,然后在电脑设置 ...

  4. CentOS下通过rdesktop连接Windows远程桌面

    众所周知,微软的Windows提供了一种远程桌面系统(Remote Desktop),该服务的默认端口是3389,可使用户远程登录进行系统管理或作为终端服务器运行各种应用软件. 而要连接Windows ...

  5. windows 远程桌面连接 RPi 2B

    /************************************************************************* * windows 远程桌面连接 RPi 2B * ...

  6. qq远程连接/windows远程桌面/teamviwer/xmanager/vnc的区别

    软件 客户端运行平台 服务端运行平台 服务端是否需要同子网或公网IP 网络断开当前执行命令是否会中止 评价 QQ远程连接 windows windows 否 否 感觉用了一两分钟就动不了了 windo ...

  7. 解决Windows远程桌面连接每次都提示输入密码的问题,远程桌面记不住密码

    FROM:http://www.veryhuo.com/a/view/80444.html Windows 远程桌面连接几乎每天都用,所以使用的方便性非常重要.如果你经常用,也许会发现在某些系统中,每 ...

  8. linux下使用FreeRDP 连接 Windows 远程桌面

    linux下使用FreeRDP 连接 Windows 远程桌面   简介 FreeRDP 是一款开源的远程桌面系统,支持多种平台, 在 ubuntu 中使用 FreeRDP 可以很方便的登录到 win ...

  9. CentOS7配置图形界面及设置vnc远程连接、windows远程桌面连接

    安装CentOS桌面 yum groupinstall "GNOME Desktop" 重启,进入终端,将启动模式变更为图形模式 systemctl set-default gra ...

随机推荐

  1. Java中List Set Map 是否有序等总结

    1.Collection List Set Map 区别记忆 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文 ...

  2. HTML5Canvas标签

     

  3. javascript------>(此文转发)

    JS控制div跳转到指定的位置的解决方案总结   总结一下自己在写这个需求遇到的问题,相信大家应该是经常遇到的.即要求滚轮滚动到指定的位置.先看下基本的解决方案. 1.给链接a加个#的方式来实现跳转. ...

  4. 在Android中查看和管理sqlite数据库

    在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看.android项目中的sqlite数据库位于/data/data/项目包/databas ...

  5. OpenGL的glRotatef旋转变换函数详解

    OpenGL的glRotatef旋转变换函数详解 先看一下函数定义:void glRotatef(GLfloat angle,  GLfloat x,     GLfloat y,     GLflo ...

  6. SQL数据库基本操作语句

    一.数据库及数据库表定义 1.创建基本表 create table <表名> (<列名><数据类型>[列级完整性约束条件]                      ...

  7. hiho_1057_performance_log

    题目大意 给出一个函数调用日志,判断日志是否合法,且求出合法日志中函数调用的时间长度. 题目链接:performance log 题目分析 首先需要清除非法日志的几种情形: (1)日志的时间戳不是按照 ...

  8. c++11 其他特性(一)

    c++11还增加了许多有用的特性,比如: 1. 委托构造函数 如果一个类含有很多构造函数,这些构造函数有一些重复的地方,比如: class A{ public: A(){}; A(int a){ a_ ...

  9. opencv249配置

    vs环境变量 opencv环境变量 D:\opencv\opencv\build\x86\vc12\bin D:\opencv\opencv\build\x64\vc12\bin 包含目录 D:\op ...

  10. android 属性

    RelativeLayout 第一类:属性值为true可false android:layout_centerHrizontal        水平居中 android:layout_centerVe ...