Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
Use a Custom Set of Trusted Root Certificates
See more Certificates Examples
Demonstrates how to build a set of trusted root certificates to be used globally by all Chilkat classes.Chilkat Pascal (Lazarus/Delphi) Downloads
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.TrustedRoots,
Chilkat.ZipEntry,
Chilkat.Cert,
Chilkat.Zip;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
success: Boolean;
trustedRoots: TTrustedRoots;
zip: TZip;
entry: TZipEntry;
pemStr: string;
cert: TCert;
pattern: string;
bHasMoreEntries: Boolean;
begin
success := False;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
trustedRoots := TTrustedRoots.Create;
// Indicate that we will NOT trust any pre-installed certificates on the system.
trustedRoots.TrustSystemCaRoots := False;
// Thawte is a certificate authority that provides a .zip download of their
// root CA certificates: https://www.thawte.com/roots/index.html
// The direct download link is: https://www.verisign.com/support/thawte-roots.zip
// Note: The above URLs are valid at the time of writing this example (29-May-2015).
// Assuming the .zip has already been downloaded, open it and load each .pem file into
// our trusted roots object.
zip := TZip.Create;
// Open a .zip containing PEM files, among other things..
success := zip.OpenZip('qa_data/certs/thawte-roots.zip');
if (success = False) then
begin
WriteLn(zip.LastErrorText);
Exit;
end;
entry := TZipEntry.Create;
cert := TCert.Create;
pattern := '*.pem';
bHasMoreEntries := zip.EntryMatching(pattern,entry);
while bHasMoreEntries = True do
begin
WriteLn('Entry: ' + entry.FileName);
// Get the PEM of the CA cert:
pemStr := entry.UnzipToString(0,'utf-8');
// Load it into a certificate object:
success := cert.LoadPem(pemStr);
if (success <> True) then
begin
WriteLn(cert.LastErrorText);
end;
// Add it to the trusted roots.
trustedRoots.AddCert(cert);
bHasMoreEntries := entry.GetNextMatch(pattern);
end;
// Activate the trusted roots globally for all Chilkat objects.
// This call really shouldn't fail, so we're not checking the return value.
success := trustedRoots.Activate();
trustedRoots.Free;
zip.Free;
entry.Free;
cert.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.