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

Download and Trust the DigiCert Global Root CA

See more Certificates Examples

Demonstrates how to download a root certificate and trust it.

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.Http,
  Chilkat.BinData,
  Chilkat.Cert,
  Chilkat.TrustedRoots;

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

procedure RunDemo;
var
  success: Boolean;
  certUrl: string;
  http: THttp;
  bdCert: TBinData;
  cert: TCert;
  certPath: string;
  troots: TTrustedRoots;

begin
  success := False;

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

  //  In this example, the URLs for the DigiCert root CA certs are available at this web page:
  //  https://www.digicert.com/digicert-root-certificates.htm

  //  This example downloads the "DigiCert Global Root G3"
  //  Valid until: 15/Jan/2038
  //  Serial #: 05:55:56:BC:F2:5E:A4:35:35:C3:A4:0F:D5:AB:45:72
  //  Thumbprint: 7E04DE896A3E666D00E687D33FFAD93BE83D349E

  certUrl := 'https://dl.cacerts.digicert.com/DigiCertGlobalRootG3.crt';

  http := THttp.Create;
  bdCert := TBinData.Create;
  success := http.DownloadBd(certUrl,bdCert);
  if (success = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  //  Load it into a Chilkat cert object.
  cert := TCert.Create;
  success := cert.LoadFromBd(bdCert);
  if (success = False) then
    begin
      WriteLn(cert.LastErrorText);
      Exit;
    end;

  //  Examine the common name,serial, and thumbprint:
  WriteLn('CN: ' + cert.SubjectCN);
  WriteLn('Serial: ' + cert.SerialNumber);
  WriteLn('Thumbprint: ' + cert.Sha1Thumbprint);

  //  Output from the above:
  //  CN: DigiCert Global Root G3
  //  Serial: 055556BCF25EA43535C3A40FD5AB4572
  //  Thumbprint: 7E04DE896A3E666D00E687D33FFAD93BE83D349E

  //  If desired, the certificate can be saved to a local file so it does not need
  //  to be downloaded from the website every time.  
  certPath := 'qa_data/certs/DigiCertGlobalRootG3.crt';
  success := bdCert.WriteFile(certPath);

  //  To load the cert from a file...
  success := cert.LoadFromFile(certPath);

  //  Do the following to add the cert to the collection of trusted roots
  //  for this application.  (Note:  The trust is not persisted.  Each time the
  //  application runs, it should load the cert (from whatever source, whether it is
  //  a file, a database,etc.) and do the following:
  troots := TTrustedRoots.Create;

  troots.AddCert(cert);
  troots.Activate();

  WriteLn(cert.SubjectCN + ' is now trusted for this run of this application.');


  http.Free;
  bdCert.Free;
  cert.Free;
  troots.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.