b/s下的ic卡的读写需要使用activex来辅助完成,activex是下载到每个客户端执行的,任何个用户都可以得到该activex。如果对ic卡在安全性方面要求很高,在加密数据或密码的过程中很难做到完美,原因是客户端的activex需要配合脚本如js或vbs来完成,而客户端脚本通常都是透明的,目前尚未找到特别安全的基于b/s的解决方案。
有两种办法,第一种
流程如下:1.用户的浏览器发出浏览登陆网页的请求。
2.服务器生成一个长的随机串a,并纪录a,把这个串写在网页中的activex的参数里。
3.浏览器收到该页面, 显示,并创建 activex 实例, acrivex 实例将此字串发给刷卡机, ic卡用其内部的算法(复杂的如私钥加密)对a加密,返回串 b 到 activex实例。
4.网页提交时, 将 activex实例 中的b读出, post给 服务器。
5.服务器收到b后, 使用相应的算法(复杂的如公钥解密)算出 xa, 比较 a?=xa, 就知道使不是合法登陆了。
第二种方法, 利用 m$的用户验证方法。
客户机先利用ic卡登陆本地系统(m$有此项接口), 之后,利用m$身份认证机制,让 服务器检查,是不是指定的用户。个人认为,你用第一种会更好点。