智能卡做身份验证

https://www.cnblogs.com/AlexanderYao/p/4307304.html

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没有创建或没能启动。可自行创建:

1 sc create ngslotd binPath= "%ProgramFiles%
gsrv
gslotd.exe" start= auto depend= ScardSvr
2 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

============= End