从客户端检索通用访问卡(CAC)信息

时间:2012-04-05 13:12:19

标签: coldfusion coldfusion-9

所以我找到了一些代码

<cfset x509 = GetPageContext().getRequest().getAttribute("javax.servlet.request.X509Certificate") />


<cfoutput>not before = #x509[1].getNotBefore()#</cfoutput><br/>
<cfoutput>not after = #x509[1].getNotAfter()#<br></cfoutput>
<cfoutput>#ToBase64(x509[1].getEncoded())#<br></cfoutput>
<cfoutput>#x509[1].getIssuerDN()#<br></cfoutput>
<cfoutput>#x509[1].getIssuerX500Principal()#<br></cfoutput>

我希望此代码执行的操作是显示来自CAC的信息,而不是我收到错误Variable X509 is undefined ...

修改

另一种解决方案似乎是使用CGI.CERT_SUBJECT但是我并不确定如何将此变量作为空字符串以外的任何内容。 FWIW我试着让它在独立的coldfusion服务器上工作。

2 个答案:

答案 0 :(得分:1)

当找不到属性时,getAttribute()方法返回NULL变量,这就是在这种情况下发生的事情。您必须先查看它是否已定义,然后才能显示它。

<cfif StructKeyExists( variables, "x509" )>
     { Code }
</cfif>

关于如何获取您所追求的属性,我无法告诉您,但这样可以防止错误发生。

答案 1 :(得分:0)

根据您的Web服务器(我知道如果您设置SSLOptions +StdEnvVars +ExportCertData,Apache会这样做),您可以将PEM编码的证书作为环境变量(即cgi.ssl_client_cert)获得,您可以获得其他信息(DN,发行人的DN等)。 Here's环境变量列表。