Request.ClientCertificate Collection

ClientCertificate集合从客户端浏览器传到Web服务器的安全性证书那里取得键和值的字段。在针对公共密钥证书的X.509 v 3标准中指定了这些字段。因为X.509没有一个官方标准,你可能会注意到得自不同的证书认证机构的证书各有所不同。欲进一步了解,请参阅W3C网站。

为了填充ClientCertificate集合的字段,Web服务器和客户端浏览器都必须支持SSL 3.0/PCT 1.0协议。网站必须启用安全套接层(SSL),并请求客户端证书。在启用了SSL之后,网站的URL将以“https://”开头,而不是以“http://”开头。客户端浏览器必须能够发送一个证书。如果没有发送证书,ClientCertificate集合返回EMPTY。

你必须配置你的Web服务器以请求客户端证书。

要想读取ClientCertificate集合中的每个字段的值,请传递一个键名以及可选的子字段名。

Note:
从IIS 6.0开始,IIS用unicode构造,为的是给国际应用程序提供更好的支持。这可能会影响一些功能,比如说Request.ClientCertificate集合。如果你正在从旧版本的IIS中移植代码,请使用自定义的COM对象来把公共密钥转换到ANSI,以使返回的参数以后ASP可以显示。欲进一步了解关于为ASP网页创建COM对象的信息,请参阅为ASP创建COM组件

句法

Request.ClientCertificate(Key[SubField])

参数

Key
指定要读取的证书字段的名称。一个客户端证书有以下字段构成。

意思
Certificate一个字符串,包含了ASN.1格式的整个证书内容的二进制流。它可以用来发现下面没有列出的特定的子字段是否出现。
FlagsA set of flags that provides additional client certificate information. If Flags is set to 1, a client certificate is present. IfFlags is set to 2, the last certificate in this chain is from an unknown issuer.
IssuerA string that contains a list of subfield values containing information about the issuer of the certificate. If this value is specified without a SubField, the ClientCertificate collection returns a comma-separated list of subfields. For example, C=US, O=Verisign, and so on.
SerialNumberA string that contains the certification serial number as an ASCII representation of hexadecimal bytes separated by hyphens (-). For example, 04-67-F3-02.
SubjectA string that contains a list of subfield values. The subfield values contain information about the subject of the certificate. If this value is specified without a SubField, the ClientCertificate collection returns a comma-separated list of subfields. For example, C=US, O=Msft, and so on.
ValidFromA date specifying when the certificate becomes valid. This date follows VBScript format and varies with international settings. For example, in the United States, 9/26/96 11:59:59 P.M.. The year value is displayed as a four-digit number.
ValidUntilA date specifying when the certificate expires. The year value is displayed as a four-digit number.
SubField
一个可选的参数,你可以用来取得Subject键或Issuer键中的单独的字段。这些参数添加到Keyparameter,作为后缀。举个例子,IssuerO或SubjectCN。下表列出了一些常见的子字段值。

意思
C指定来源的国家/地区名。
CN指定用户的常用名。(这个子字段只能与Subject键合用。)
GN指定一个给定的名称。
ISpecifies a set of initials.
LSpecifies a locality.
O指定公司或机构的名称。
OU指定机构单位的名称。
S指定一个州或一个省。
T指定人或机构的标题。

上表中列出之外的子字段值,可以用它们的ASN.1对象标识符(OID)来标识。对象标识符的格式是一个用句点(.)分开的数字列表。针对你的证书的对象标识符的列表,可以从发布你的证书的当局那里取得。

适用于

Request对象

示例代码

你可以遍历ClientCertificate集合中的键,如下面的示例所示。

VBScript
<% 
  For Each strKey in Request.ClientCertificate 
    Response.Write strkey & " = " & Request.ClientCertificate(strkey) & "<BR>" 
  Next 
%>

下面的示例取得了颁发客户端证书的公司的常用名。

VBScript
<%= Request.ClientCertificate("IssuerCN") %>

下面的示例显示了客户端证书的过期日期。

VBScript
This certification will expire on  
<%= Request.ClientCertificate("ValidUntil") %>

下面的示例使用Flags键来测试证书的发布者是否是已知的。

VBScript
<% 
  Const ceCertPresent = 1 
  Const ceUnrecognizedIssuer = 2 
  If Request.ClientCertificate("Flags") = ceUnrecognizedIssuer Then 
    Response.Write "Unrecognized issuer" 
  End If 
%>

下面的示例显示了一个客户端证书的所有字段。

VBScript
Issuer: <%=Request.ClientCertificate("Issuer")%><br> 
Subject: <%=Request.ClientCertificate("Subject")%><br> 

<% cer=Request.ClientCertificate("Certificate") %> 
Certificate Raw Data: <%=cer%><br> 
Certificate length: <%=len(cer)%><br> 
Certificate Hex Data: 
<% For x=1 To 100 %> 
  <%=hex(asc(mid(cer,x,1)))%>nbsp; 
<% Next %>

必备条件

Client: Requires Windows XP Professional, Windows 2000 Professional, or Windows NT Workstation 4.0.

Server: Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server 4.0.

Product: IIS

如果你喜欢这篇文章,敬请给站长打赏↑

除特别注明外,本站所有文章均为本站站长原译,转载请注明出处。