<%@ 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); %>