Sample code for 30+ languages & platforms
Delphi DLL

Get Certificate User Principal Name (UPN)

See more Certificates Examples

Demonstrates how to get a certificate's UPN from the SAN (Subject Alternative Name). Most certificates do not have a UPN. This example only applies to those certificates that have a User Principal Name.

Note: This example requires Chilkat v9.5.0.90 or greater due to fixes made in getting the UPN from the SAN.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Cert, Xml;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
cert: HCkCert;
xml: HCkXml;
upn: PWideChar;

begin
success := False;

cert := CkCert_Create();

success := CkCert_LoadFromFile(cert,'qa_data/certs/sample.cer');
if (success = False) then
  begin
    Memo1.Lines.Add(CkCert__lastErrorText(cert));
    Exit;
  end;

xml := CkXml_Create();
CkXml_LoadXml(xml,CkCert__subjectAlternativeName(cert));
Memo1.Lines.Add(CkXml__getXml(xml));

// A certificate with a User Principal Name in the SAN might have this:

// <SubjectAltName>
//     <rfc822Name>joe@example.com</rfc822Name>
//     <name type="oid" oid="1.3.6.1.4.1.311.20.2.3">joe@example.com</name>
// </SubjectAltName>

// The OID 1.3.6.1.4.1.311.20.2.3 is for the User Principal Name.
upn := CkXml__chilkatPath(xml,'/A/name,oid,1.3.6.1.4.1.311.20.2.3|*');
if (CkXml_getLastMethodSuccess(xml) = False) then
  begin
    Memo1.Lines.Add('No user principle name.');
  end
else
  begin
    Memo1.Lines.Add('User Principle Name = ' + upn);
  end;

CkCert_Dispose(cert);
CkXml_Dispose(xml);

end;