关闭

关于IIS中客户端数字证书的认证问题释疑

1460人阅读 评论(0) 收藏 举报

最近一直在研究IIS中客户端数字证书的认证问题。

我们知道,IIS提供了两种方法,在SSL且强制要求客户端证书的情况下,取得客户端数字证书的信息。

一种是通过Request.ClientCertificate,这个方法的有点是可以取到数字证书的二进制流,但是处理中文上有问题。另一个方法是Request.ServerVariables,这个处理中文不存在乱码问题,但是取得的信息量没有前者多。

而且只取得证书的发行者名称,验证起来实在是太荒唐了,那个恐怕根本不能称其为验证,即是是两个不同的CA也可以注册相同的名称,我们无法根据这个判断是不是受信任的CA颁发的证书。

但是,因为ASP没法轻易地与本地系统的CA通信,无法查询本地CA已经颁发的证书,所以也就不能对客户端提供的证书的序列号等具有唯一性的字段进行验证。

数字证书里面有一个“颁发者密钥标识符”的字段(客户端),CA根证书显示的是“使用者密钥标识符”,这两个字段是匹配的,而且是唯一的(针对一个CA而言)。但是无法得到这个值,失败……

以上……思考+实践过程……

后来发现自己自作多情了,MS的东西特点就是对人友好,简洁方便……怎么自己还想着用这么土鳖的办法呢。

IIS如果强制请求数字证书,那么就是在本机的信任证书颁发机构里面查找客户提供证书的颁发机构,如果失败,就拒绝客户端连接。(是不是非常棒?)

这样一来,用数字证书代替username、password的朋友就享福了,只要控制好服务器的信任CA列表,再验证客户证书的几个可以轻易获得的字段,就可以代替传统的验证了,而且不会发生用另一个受信任CA颁发的证书冒名顶替的事情。

我这土鳖的脑袋。。。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:638769次
    • 积分:9119
    • 等级:
    • 排名:第2016名
    • 原创:287篇
    • 转载:19篇
    • 译文:9篇
    • 评论:84条
    最新评论