| |
| |
那位高手指点下:我现在在记事本里有段程序了: <% Dim con,sql,nber,rs nber=Request.ClientCertificate("SerialNumber") set con=Server.CreateObject("adodb.Connection") 'dbpath=server.MapPath("路径.mdb") con.open "Provider=SQLOLEDB;data source=192.168.0.254;initial catalog=数据库名;user id=用户名;password=密码" sql="select nber from cerNuber where nber='"&nber&"'" set rs=con.execute(sql) if rs.eof then response.write "<div align='center' style='font-size:11pt'><b>对不起,请提供有效的数字证 书进行登录!点<a href='#' onclick='javascript:history.back(-1)'>这里</a>返回</b></div>" Response.End else nber=rs("nber") end if rs.close set rs=nothing con.close set con=nothing %> 不知道在那里用.怎么运行!哎,我是很初学的,请指教,谢谢 |
在ASP中读取数字证书
在ASP中读取数字证书
1、环境要求 服务器端IIS并配置安全站点。 2、读取数字证书(方法一) 数据集合:Request.ClientCertificate(key[SubField]) 所有客户证书的信息的集合。对于Key,该集合具有如下的关键字: Subject 证书持有者的主题,数据格式以英文逗号分隔。(不建议使用) Issuer 证书的发行颁发者主题,数据格式以英文逗号分隔。(不建议使用) VadidFrom 证书发行的日期,证书生效日期。 ValidUntil 该证书不再有效的时间。 SerialNumber 证书的序列号。 Certificate 包含整个证书内容的二进制流,使用ASN.1格式。 对于SubField,Subject和Issuer关键字可以具有如下的子域后缀:(比如:SubjectOU或IssuerL) C 国家。 S 州(或省)。 O 公司或组织名称。 T 个人或公司的标题。 OU 组织单元。 GN 给定名称。 CN 用户的常规名称。 I 初始。 L 地区。
当文件cervbs.inc(VBScript使用)或cerjavas.inc(Jscript使用)通过使用#INCLUDE导向包含在你的Active Server Page里时,下面两个标志可以使用: ceCertPresent 指明客户证书是否存在,其值为TRUE或FALSE。 ceUnrecongnizedIssure 指明在该链表中的最后的证书的发行者是否未知,其值为TRUE或FALSE。 3、读取数字证书(方法二) 数据集合:Request.ServerVaribles(Server Environment Variable) 环境变量的集合,读取HTTP头。可以通过使用HTTP_前缀来读取任何头信息。比如,HTTP_USER_AGENT接受客户代理HTTP头(浏览器类型)。此外,可以使用下表所示的变量获得数字证书相关信息。 CERT_COOKIE 唯一的客户证书ID号。 CERT_FLAG 客户证书标志,如有客户端证书,则bit0为0。如果客户端证书验证无效,bit1被设置为1。 CERT_ISSUER 用户证书中的颁发者字段。 CERT_KEYSIZE 安全套接字层连接关键字的位数,如128。 CERT_SECRETKEYSIZE 服务器验证私人关键字的位数。如1024。 CERT_SERIALNUMBER 客户证书的序列号字段。 CERT_SUBJECT 客户端证书的主题字段。 CERT_SERVER_ISSUER 服务器证书的发行者字段 CERT_SERVER_SUBJECT 服务器证书的主题字段。 HTTPS 如果请求穿过安全通道(SSL),则返回ON。如果请求来自非安全通道,则返回OFF。 HTTPS_KEYSIZE 安全套接字层连接关键字的位数,如128。 HTTPS_SECRETKEYSIZE 服务器验证私人关键字的位数。如1024。 HTTPS_SERVER_ISSUER 服务器证书的发行者字段。 HTTPS_SERVER_SUBJECT 服务器证书的主题字段。
4、补充说明 2中提到的通过Subject和Issuer所获得的相关主题信息在包含中文的情况下是乱码;通过Request.ServerVaribles数据集合获得证书持有者的主题信息和证书颁发机构的主题信息没有任何问题。 5、 示例 参考以下default.asp源代码。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>证书测试</title> </head> <body> <p><font size=4 color=red>遍历Request.ServerVaribles数据集合</font></p> <% for each key1 in Request.ServerVariables Response.Write(key1 + ":") Response.Write(Request.ServerVariables(key1) + "<br>") next %>
<% SerialNumber = Request.ClientCertificate("SerialNumber")
Subject=Request.servervariables("CERT_SUBJECT")
tempSubject=split(Subject,",") for i=0 to ubound(tempSubject) temp = split(tempSubject(i),"=") if trim(temp(0))="CN" then SubjectCN=temp(1) end if if trim(temp(0))="O" then SubjectO=temp(1) end if if trim(temp(0))="OU" then SubjectOU=temp(1) end if if trim(temp(0))="L" then SubjectL=temp(1) end if if trim(temp(0))="S" then SubjectS=temp(1) end if if trim(temp(0))="C" then SubjectC=temp(1) end if
next
session("certSerial") = SerialNumber session("certSubject") = Subject %>
<table> <%if len(SerialNumber) >5 then %> <tr> <td width="100%"> <b><font color="#003399" face="幼圆" size="3"> <% Response.Write " 持有者信息:<br>"%> </font></b></p> <%Response.Write Subject %> <table width="95%" border="1" bordercolor="#CC9933"> <tr bgcolor="#99FFFF"> <td width="47%">姓名: </td> <td width="53%"><font size="3" color="#FF3333"><%Response.Write SubjectCN %></font></td> </tr> <tr> <td width="47%">您的 E-mail 地址: </td> <td width="53%"><font size="3" color="#FF3333"><%Response.Write Request.ClientCertificate("SubjectEMAIL") %></font></td> </tr> <tr bgcolor="#99FFFF"> <td width="47%">单位:</td> <td width="53%"><font size="3" color="#FF3333"><%Response.Write SubjectO %></font></td> </tr> <tr> <td width="47%">部门: </td> <td width="53%"><font size="3" color="#FF3333"><%Response.Write SubjectOU %></font></td> </tr> <tr bgcolor="#99FFFF"> <td width="47%">城市: </td> <td width="53%"><font size="3" color="#FF3333"><%Response.Write SubjectL %></font></td> </tr> <tr> <td width="47%">省份: </td> <td width="53%"><font size="3" color="#FF3333"><%Response.Write SubjectS %></font></td> </tr> <tr bgcolor="#99FFFF"> <td width="47%">国家: </td> <td width="53%"><font size="3" color="#FF3333"><%Response.Write SubjectC %></font></td> </tr> </table> <p><b><font color="#003399" face="幼圆" size="3"> <% Response.Write " 发行者信息: <br>"%> </font></b> <table width="95%" border="1" bordercolor="#CC9933"> <tr> <td width="47%" bgcolor="#99FFFF">CN: </td> <td width="53%" bgcolor="#99FFFF"><%Response.Write Request.ClientCertificate("IssuerCN") %></td> </tr> <tr> <td width="47%" bgcolor="#99FFFF">单位:</td> <td width="53%" bgcolor="#99FFFF"><%Response.Write Request.ClientCertificate("IssuerO") %></td> </tr> <tr> <td width="47%" bgcolor="#99FFFF">城市: </td> <td width="53%" bgcolor="#99FFFF"><%Response.Write Request.ClientCertificate("IssuerL") %></td> </tr> <tr> <td width="47%">省份: </td> <td width="53%"><%Response.Write Request.ClientCertificate("IssuerS") %></td> </tr> <tr bgcolor="#99FFFF"> <td width="47%">国家: </td> <td width="53%"><% Response.Write Request.ClientCertificate("IssuerC") %></td> </tr> </table> <p><b><font color="#003399" face="幼圆" size="3"> <% Response.Write " 序列号: " &session("certSerial") & "<br>" Response.Write " 有效期自: " & Request.ClientCertificate("ValidFrom") & " " Response.Write " 至: " & Request.ClientCertificate("ValidUntil") & "<br>"
keysize = Request.ServerVariables("CERT_KEYSIZE") secretkeysize = Request.ServerVariables("CERT_SECRETKEYSIZE") Response.Write( "SSL连接密钥长度: " & keysize & "<br>") Response.Write( "服务端证书私钥长度:" & secretkeysize) Response.Write( "证书:" ) %></font></b> </p> </td> </tr> <tr> <td><font color="#FF3333" size="4" face="幼圆"><b><font face="宋体"><%Response.Write "证书测试通过!!!<br>"%></font></b></font></td> </tr> <tr> <td align=center></td> </tr> <%else%> <tr> <td> <div align="center"> <p> </p> <p> </p> <p><font face="华文中宋"><b><font size="5">没有提供有效的证书,</font></b></font></p> </div> <td><tr> <tr> <td> <div align="center"> <p> </p> <p><font face="华文中宋"><b><font size="5">要想正确访问该页,</font></b></font></p> </div> <td><tr> <tr> <td> <div align="center"> <p> </p> <p><font face="华文中宋"><b><font size="5">请到陕西省数字证书认证中心申请数字证书。</font></b></font></p> <p> </p> </div> <td><tr> <%end if%> </table> </BODY> </HTML>