%@ Page aspcompat="true" LANGUAGE="C#" %>
<%@ Assembly Name="Interop.CAPICOM" %>
<%@ Import Namespace="CAPICOM" %>
<%@ Import Namespace="System.Runtime.InteropServices" %>
ClientCert Sample
ClientCert ASP.NET Demo
<%
HttpClientCertificate cs = Request.ClientCertificate;
byte[] rawcert = cs.Certificate;
Response.Write("Cert bytes: " + rawcert.Length + "
");
const uint X509_ASN_ENCODING = 0x00000001;
const uint PKCS_7_ASN_ENCODING = 0x00010000;
uint encoding = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING ;
uint pcertcntxt = CertCreateCertificateContext(encoding, rawcert, (uint)rawcert.Length);
Response.Write("Cert context: " + pcertcntxt + "
");
//------ Instantiate CAPICOM Certificate instance using certcontext from Pinvoke ----
CertificateClass ocert = new CertificateClass();
ocert.CertContext = (int) pcertcntxt ;
Response.Write("SubjectName: " + ocert.SubjectName + "
") ;
int iIndex = 0;
Response.Write("---Certificate Extensions ----
") ;
foreach (Extension extens in ocert.Extensions())
{
iIndex++;
Response.Write( "Extension #" + Convert.ToString(iIndex) + ": " + extens.OID.FriendlyName + "(" + extens.OID.Value + ")
");
Response.Write( " " + extens.EncodedData.Format(true) + "
");
}
if (iIndex == 0)
Response.Write( "No certificate extensions.
");
iIndex = 0;
Response.Write("---Certificate Extended Properties ----
") ;
foreach (ExtendedProperty eprop in ocert.ExtendedProperties())
{
iIndex ++;
Response.Write( "Property #" + Convert.ToString(iIndex) + " (ID = " + eprop.PropID + "):
" );
Response.Write( " " + eprop.get_Value(CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64) + "
");
}
if (iIndex == 0)
Response.Write( "No extended properties.
");
if(pcertcntxt !=0)
CertFreeCertificateContext(pcertcntxt);
%>