Delphi DLL
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
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;