所以我找到了一些代码
<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服务器上工作。
答案 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环境变量列表。