Windows 2003,ASP,使用Request.ClientCertificate("Certificate")取得的证书全文不正确

27.2.2 ASP/ASP.NET页面获取客户端证书的方法 在ASP/ASP.NET页面上读取客户端数字证书有两中方法,分别是读取Request.ClientCertificate(key[SubField])和读取Request.ServerVaribles(Server Environment Variable)。1.读取Request.ClientCertificate(key[SubField])ClientCertificate集合是 阅读详情

如果你在Windows Server 2003 + SP1(IIS版本6.0)里面部署ASP,该ASP使用Request.ClientCertificate("Certificate")的方式来取得客户端证明书全文(并转换为BASE64字符串),那么很不幸的,你可能尽是取得一堆诸如下述的东西。


Pz8/Pz9BP34/Pz8/Pz9hPyA/uz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz+vPz8/Pz8/
Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P7s/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/
Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz9jYQU/jT8/Pz8/
Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/OT8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/BT8/
Pz8/Pz8/Pz8/Pz8/Pz8/YUE/Pz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8/Pz+7Pz8/TGE/
Pz8/QT8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P2E/rz8/Pz8/Pz8/Pz8/Pz8/Pz8/
Pz8/Pz8/Pz8/Pz8/Pz8/Kz8/Pz8/Pz8/Pz8/Pz8/Pys/Pz8/Pz8/Pz8/Pz8/Pz8/
Pz8/Pz8/Pz8/Pz8/Pz8/Yz8FP4E/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/
Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz/FPz8/Pz8/Pz8/Pz8/Pz8/

 

关于这个杯具可以参考这篇文章:

Dump client certificates from SSL to file?

http://www.derkeiler.com/Newsgroups/microsoft.public.inetserver.iis.security/2004-08/0147.html

 

该文章里面提到的使用方法来自:

How to Write a Client Authentication Certificate to a File in IIS 4.0

http://support.microsoft.com/default.aspx?scid=kb;en-us;216829

 

注意msdn里面的这篇文章是基于IIS4.0的!

 

经验证,在Windows 2000 Server + SP4(IIS版本5.0)上没有这样的问题,可以正常取得证明书全文,在Windows XP + SP2(IIS5.1)上则存在同样问题。简言之,猜测理解为,以IIS5.1为界,大于或等于5.1,有问题,小于则没问题。

 

后来的调查发现,很有可能,这是微软的BUG。。。

 

参考以下文章:

FIX: The contents of the Request.ClientCertificate("Certificate") field are incorrect when an .asp Web page is hosted on IIS 6.0

http://support.microsoft.com/kb/916833/en-us/

 

文章里面提到:

Consider the following scenario. You browse an .asp Web page that is hosted on Microsoft Internet Information Services (IIS) 5.0. You then use the same client and keyset to browse the same .asp Web page, but the Web page is hosted on IIS 6.0.

In this scenario, the contents of the Request.ClientCertificate("Certificate") field are incorrect when the page is hosted on IIS 6.0. For example, the last byte of the content is incorrect when you use a COM component to write the content to a certificate in ASN.1 format.

 

解决办法:

To resolve this problem, obtain the latest service pack for Windows Server 2003. For more information, click the following article number to view the article in the Microsoft Knowledge

 

详细请参考原文。。。

 

------------------------------------------------------------

后记(2010/10/14):

实践表明,在Windows Server 2003上安装了SP2之后并不能解决这个问题。

现象依旧,如有兄弟姐妹遇到了,解决了的路过,还请不吝赐教,多谢。

 

------------------------------------------------------------

后后记(2010/12/08):

实际上,我们可发现问题的根源在于从IIS6.0开始,Request.ClientCertificate所返回的内容已经统一使用Unicode编码,也就是说,尽管“Certificate”这个项是二进制内容(非文本),MS还是将之转换到Unicode了。真不知道MS怎么想的。

 

MSDN原文是这样说的:

http://msdn.microsoft.com/en-us/library/ms524668%28VS.90%29.aspx


Note Note:

Beginning with IIS 6.0, IIS is built in unicode in order to provide improved support for international applications. This can affect features like Request.ClientCertificate Collection . If you are porting code from an older version of IIS, use custom COM object to convert the public key to ANSI in a return parameter that ASP can then display. For more information about creating COM objects for ASP pages, see Creating COM Components for ASP .

 

※不过这段内容不能说明为什么IIS5.1上也存在同样故障现象。

 

★要解决这个问题有两种方法,一是在安装了SP2的基础上,修改注册表:

以下为摘要内容,详情请参考:http://support.microsoft.com/kb/886810

Warning If you use Registry Editor incorrectly, you may cause serious problems that may require you to reinstall your operating system. Microsoft cannot guarantee that you can solve problems that result from using Registry Editor incorrectly. Use Registry Editor at your own risk.

  1. Click Start , click Run , type regedit in the Open box, and then click OK .
  2. Locate and then right-click the following registry key:
    HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/ASP/Parameters
    Note If the Parameters key is not found, you must create it.
  3. Click New , and then click DWORD Value .
  4. Type DisableCertificateBlobAsArray , and then press ENTER.
  5. Right-click DisableCertificateBlobAsArray, and then click Modify .
  6. Type 1 in the Value data box, and then click OK .

    Note If you assign a value of 1 to the DisableCertificateBlobAsArray registry entry, the same behavior occurs in IIS 6.0 and in IIS 5.0. If you assign a null value (0) to the DisableCertificateBlobAsArray registry entry, IIS 6.0 works as if the hotfix is not applied, and the problem may occur again.
  7. Close Registry Editor.
  8. Restart the World Wide Publishing service. To do this, follow these steps:
    1. Click Start , point to Programs , point to Administrative Tools , and then click Services .
    2. Right-click World Wide Web Publishing Service , and then click Restart .

 

二是逆向操作,把已经被转换到Unicode的Certificate内容转回ANSI,这个可以利用ADODB.Stream的功能,写一个小函数自行转换即可。至于到底选择方法一还是方法二,嗯,见仁见智各取所需吧。

从零开始理解二极管限幅:5种典型电路设计及实际应用场景解析 本文系统解析了二极管限幅电路的五大经典拓扑,包括串联与并联型上下限幅及双向限幅。通过剖析其核心原理与二极管的单向导电性、正向压降特性,结合ADC输入保护、电源管理、音频处理等实际应用场景,提供了从器件选型到设计陷阱规避的完整实战指南,帮助工程师为信号构建可靠的“安全笼”。 阅读详情

相关推荐

逆变器专题(3)-锁相环-PLL

锁相环作为并网逆变器的第一道门户,其锁相的精度将直接影响逆变器是否并网成功,若锁相精度较差,则会直接导致系统的功率因数下降,产生无功等等。在有关文献中指出,提高PLL带宽可以准确且快速进行锁相,而当电网电压含有谐波时,可适当降低带宽抵制谐波的干扰。成为变化量,而如果两者旋转速度达到一致时,所在的交轴分量。ki很大,即带宽很大时,稳定裕度不够,锁相环锁不住。为交流量,当频率锁定而相位没有锁定时,即。,即控制环前馈,可实现将锁相速度的加快。控为0,则可实现系统完美锁相。mod,取余,可减少存储空间。

cyc19980105的博客 6182

Windows2003、IIS6、ASP、Request.ClientCertificate("Certificate")最后一字节错误

<br />如标题所言,我们发现通过该数组取出来的证明书的最后或倒数第二个字节是错误的。<br />多番调查、试验、追踪原因,发现竟然又是MS的BUG!<br /> <br />http://support.microsoft.com/kb/916833/en-us/<br /> <br />Consider the following scenario. You browse an .asp Web page that is hosted on Microsoft Internet Informati

你是我永远的乡愁 635

动态对抗Zygisk-IL2CppDumper:Unity游戏安全新策略

本文深入探讨了对抗Zygisk-IL2CppDumper攻击的Unity游戏安全新策略。通过实时内存监控、动态混淆技术和异常行为检测体系,有效防止关键代码被动态提取。文章详细介绍了内存指纹系统、运行时混淆方案和五维特征模型等实用防御手段,帮助开发者提升游戏安全性。

weixin_29325955的博客 306

登录系统报SSL server requires client certificate ErrorCode: 901 错误的解决方法

登录系统报SSL server requires client certificate ErrorCode: 901 错误的解决方法 一般出现这种情况时可能是以下三种情况造成的。 首先,要检查输入的网址是否正确。这种情况是最好解决的一种问题,一般输入正确网址就可以。 第二,浏览器配置问题。确定是正确的网址,就需要看看浏览器的配置问题。以IE浏览器为例: 1、工具–兼容性视图,添加网址,关闭。 2...

victoriafan的博客 20万+

告别手动脚本!用TSMaster Python小程序5分钟搞定CAN报文自动发送

本文介绍了如何使用TSMaster的Python小程序功能快速实现CAN报文自动发送,大幅提升汽车电子测试效率。通过简洁的Python代码示例,展示了如何替代传统手动操作和复杂C脚本,实现周期性发送、动态修改报文内容等常见需求,帮助工程师5分钟内完成自动化配置。

weixin_30292843的博客 511

Python实现微信PC端聊天记录自动化监听与智能回复

本文详细介绍了如何使用Python实现微信PC端聊天记录的自动化监听与智能回复。通过win32api和uiautomation库,模拟人工操作,实时监控聊天窗口并抓取新消息。文章重点讲解了核心代码逻辑、环境搭建步骤,并提供了实现关键词触发自动回复的完整方案,旨在提高工作效率与信息管理自动化水平。

weixin_29092031的博客 345

TLS/SSL 协议详解(15) client certificate

如果服务器端请求了客户端的证书,客户端即使没有证书,也需要发送该类型的握手报文,只是这种情况下,里面的内容为0。 如果浏览器有对应的证书,则会发送证书,当然,也有可能发送上级证书(即发送证书链),这个完全取决于浏览器。特别说明一点,我亲眼见过IE带了一个过期的上级证书发送到服务器,这个简直亮瞎了我。 ---------------------  作者:Mrpre  来源:优快云  原文...

叼哥的博客 4404

vuecil3+版本下,兼容ie等不支持es6的低版本浏览器

*综上,完成兼容性涉及到的配置的文件有,对应在页面中查看代码,就不单独附代码了:main.js。

yhr0322的博客 833

svn操作提示 open client certificate file

最近出现个情况比较尴尬,使用svn的时候总是会弹出要打开证书文件的提示,但是这个文件不知道在哪块,干什么的。。。 后来突然想到上次在使用的时候自己在电脑的登陆选项中加了一个PIN码,因为之前在操作公司svn的时候总是会提示要输入电脑PIN码,这个码我输的是电脑的开机密码,可以正常使用,所以就联想到了是不是添加的这个pin造成的,果然在删除PIN,电脑重启后问题解决,不会再有如下弹出框。 ...

weixin_39567690的博客 1901

Java全栈:电影数据检索与推荐系统实战

全文检索个性化推荐数据缓存容器化部署通过这个项目,我们不仅实践了Java全栈开发的各项技术,还接触了推荐系统的核心算法实现。用户历史行为数据物品特征数据上下文信息实时反馈算法的准确性推荐的多样性系统的实时性冷启动问题性能优化效果评估VIEW, // 浏览CLICK, // 点击SEARCH, // 搜索RATE, // 评分COMMENT, // 评论SHARE, // 分享WATCH_TIME, // 观看时长。

exlink2012的专栏 891

嵌入式开发环境Vscode开发STM32单片机程序

STM32单片机非常强大,大多数教程都是使用 keil 编译器,keil 是收费的而 gcc 是开源免费的。这里介绍一些使用 gcc +开发单片机程序的经验。(这里不解释 gcc 是什么)。

嵌入式技术开发 1843

安装open

安装openvpn [root@ c7-42 ~]# yum -y install epel-re* [root@ c7-42 ~]# yum install -y openvpn [root@ c7-42 ~]# rpm -qa |grep openvpn |cut -c 1-13 openvpn-2.4.8 安装open-rsa [root@ c7-42 ~]# rz #上传master,...

ycf20001002的博客 312

3D打印机控制系统设计:基于MATLAB的3D打印机运动学建模、轨迹规划和控制

控制实现:在控制实现中,需要将轨迹规划的结果转化为实际的控制指令,控制3D打印机按照规划的轨迹进行运动。3D打印机的运动学建模:3D打印机的运动学建模是指将3D打印机的机械结构、传动系统和运动控制部件等抽象成数学模型,以便于进行控制系统的设计和分析。轨迹规划:轨迹规划是指根据3D模型的几何形状和打印机的运动学模型,计算出打印机需要执行的运动轨迹,以便于实现所需的打印效果。控制实现:控制实现是指将轨迹规划的结果转化为控制指令,控制3D打印机按照规划的轨迹进行运动。

走向CTO的路上... 2473

Request和Response详解

Request 和 Response 对象起到了服务器与客户机之间的信息传递作用。Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏览器。 一、Request对象的五个集合: QueryString:用以获取客户端附在url地址后的查询字符串中的信息。     例如:stra=Request.QueryString ["s

耀的专栏 1270

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Nginx配置ssl_client_certificate客户端认证问题

问题1:ssl_client_certificate配置的CA证书格式错误 参考Minitutorialforconfiguringclient-sideSSLcertificates和ClientSideCertificateAuthinNginx配置客户端的证书认证,配置好后,在浏览器使用证书认证报400错误 400BadRequest NorequiredSSLcertificatewassent 按照教程,生成相关证书都没有问题,在配置nginx的...

qq_34823218的博客 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

asp获取服务器信息大全(包括客户端证书信息)

一.服务环境变量Request.ServerVariables("Url")  返回服务器地址  Request.ServerVariables("Path_Info")  客户端提供的路径信息  Request.ServerVariables("Appl_Physical_Path")  与应用程序元数据库路径相应的物理路径  Request.ServerVariables("Path_Tr

Jinhill's Blog 6597

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SSL/TLS 通信过程

目录 Wireshark抓包 Client Hello Server Hello、Certificate、Server Key Exchange、Server Hello Done Client 验证 Server 证书 Client Key Exchange、Change Cipher Spec、Encrypted Handshake Message Server→New Session Ti...

103style 3706

java clientrequest,ClientCertRequest.java

/** Copyright (C) 2014 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obta...

weixin_39699163的博客 185

TLS/SSL 协议详解(13) certificate request

双向认证时,服务器会发送certificate request,表明自己想要收到客户端的证书。   这个类型的握手主要包含了ca证书的subject,用以告诉客户端自己需要哪些证书,不是由这些ca签发的证书“我”不要。   客户端,例如浏览器在收到这个请求时,如果不存在对应的证书,则发送一个空的certificate至服务器,如果存在一个证书,则发送该certificate至服务器。如果存在多...

叼哥的博客 4057

[iOS] [Swift] HTTPS Client Certificate / Server Certificate

条件: 在https请求中,有些url需要进行权限认证,否则无法进行,在这里对服务端要认证客户端的情况做一个总结。因为server certificate已经有很多介绍了,就不在这里赘述,本篇重点介绍client certificate的步骤。 Step1: 以URLSession发起https请求 Step2: URLSession Delegate 处理认证请求 以上两个步骤,应该是大家比较熟悉的过程。 但是对于extractIdentity这个过程,有很多人不是很熟悉,总归来讲,是需

weixin_39642925的博客 635
上一篇: Symantec AntiVirus 9,一个超级蠕虫病毒
下一篇: 微软拼音输入法是我所知的最糟糕的输入法
梦想家起飞
博客等级 码龄24年 24粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值