Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Load a CSR and Get the SANs (Subject Alternative Names)

See more CSR Examples

Demonstrates how to load a Certificate Signing Request (CSR) and get the Subject Alternative Names (if any).

Note: This example requires Chilkat v9.5.0.91 or greater.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.StringTable,
  Chilkat.FileAccess,
  Chilkat.Csr;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  csr: TCsr;
  fac: TFileAccess;
  csrPem: string;
  st: TStringTable;
  i: Integer;
  numSans: Integer;

begin
  success := False;

  //  Note: Requires Chilkat v9.5.0.91 or greater.

  //  This requires the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  csr := TCsr.Create;

  //  Load a CSR PEM file.  The file should contain content that looks like this:
  //  
  //  -----BEGIN CERTIFICATE REQUEST-----
  //  MIIDnzCCAocCAQAwgZ4xFDASBgNVBAMMC2V4YW1wbGUuY29tMRQwEgYDVQQHDAtM
  //  b3MgQW5nZWxlczETMBEGA1UECAwKQ2FsaWZvcm5pYTEUMBIGA1UECgwLRXhhbXBs
  //  ZSBJbmMxFDASBgNVBAsMC1NTTCBTdXBwb3J0MSIwIAYJKoZIhvcNAQkBFhNleGFt
  //  cGxlQGV4YW1wbGUuY29tMQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQAD
  //  ggEPADCCAQoCggEBALhIT/q7y1xwpYaR0Coplktwn7RGaJpEBCgbJWxOVPTGL540
  //  erlhc6MrSEr6fo/HNtAbn6MNWm5F0MwjEU7H1Jxc7DYav+ps3hyhGaK9jalE99Sm
  //  yFOzKMLDPyWTPpxfT4QBO4rpWxMT2lgixDkZlaNqmC6pUGXArfH+H1F3C0gtH4ZU
  //  XN/Ipyk6r6ozWnJvIefdMe1JmeMD3RSoVcXd9bNWSpiD4uJnV+2pewkkNzhcGzBH
  //  MGi4ZjIbpPiYLlri/79fPb6u7wYkYLzCWRKzq6EaJkqY6OQgE33SC1GQKjC/fFRx
  //  wogub1s9cRjfL6vdqWbTJ5xhOkPeBO3UzHBHIksCAwEAAaCBujCBtwYJKoZIhvcN
  //  AQkOMYGpMIGmMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgWgMB0GA1UdJQQWMBQGCCsG
  //  AQUFBwMBBggrBgEFBQcDAjBtBgNVHREEZjBkggtleGFtcGxlLmNvbYIPd3d3LmV4
  //  YW1wbGUuY29tgg9mdHAuZXhhbXBsZS5jb22CD3N2bi5leGFtcGxlLmNvbYIQc210
  //  cC5leGFtcGxlLmNvbYIQaW1hcC5leGFtcGxlLmNvbTANBgkqhkiG9w0BAQsFAAOC
  //  AQEAsIEDMlZViEVtuQWpfa6vUl5RfqQrop+hh9l4UmEOnERLEzyVO+9Kn7jNxyOR
  //  Gg7O9H4BYTfet6YwfpawbnQ1HBexduRZaUnET8RiYgKch0vWr/HbP7jvc23XUz2P
  //  NOAiet/tyTU6U5xJn0H4q1VFIbHjntpBSL+n+aiv8glIUepG8BwTu+vBe2/kVzKG
  //  ro2tudhbpEJYOwurlHCoubhCah9ryIkDeYEnycsrB6VnaxeGK0/5S2JBQo22/F9s
  //  T+q0Gee936ISvypLwNoIX+YFAjw2KnqucUM3RKHAAheJin5WNIQXdHHKGsImapun
  //  VqmPwLN6Kgm+kFVS0H5eyULSnA==
  //  -----END CERTIFICATE REQUEST-----

  fac := TFileAccess.Create;
  csrPem := fac.ReadEntireTextFile('qa_data/csr/myCsr.pem','utf-8');

  success := csr.LoadCsrPem(csrPem);
  if (success <> True) then
    begin
      WriteLn(csr.LastErrorText);
      Exit;
    end;

  //  Get the SANs
  st := TStringTable.Create;

  success := csr.GetSans(st);
  if (success <> True) then
    begin
      WriteLn(csr.LastErrorText);
      Exit;
    end;

  i := 0;
  numSans := st.Count;
  while i < numSans do
    begin
      WriteLn(st.StringAt(i));
      i := i + 1;
    end;



  csr.Free;
  fac.Free;
  st.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.