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

Load Particular CA Certs into a Java KeyStore

See more Java KeyStore (JKS) Examples

Opens a PEM file containing many CA root certificates, and creates a Java keystore containing a subset of the certificates.

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.TrustedRoots,
  Chilkat.JavaKeyStore,
  Chilkat.Cert,
  Chilkat.StringBuilder;

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

procedure RunDemo;
var
  success: Boolean;
  jks: TJavaKeyStore;
  troots: TTrustedRoots;
  sbDn: TStringBuilder;
  sbAlias: TStringBuilder;
  caseSensitive: Boolean;
  i: Integer;
  numCerts: Integer;
  numAdded: Integer;
  cacert: TCert;
  numJksCerts: Integer;

begin
  success := False;

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

  jks := TJavaKeyStore.Create;

  troots := TTrustedRoots.Create;

  //  Load certificates from a file.
  success := troots.LoadCaCertsPem('qa_data/curl_cacert.pem');
  if (success <> True) then
    begin
      WriteLn(troots.LastErrorText);
      Exit;
    end;

  sbDn := TStringBuilder.Create;
  sbAlias := TStringBuilder.Create;
  caseSensitive := False;

  i := 0;
  numCerts := troots.NumCerts;
  numAdded := 0;
  while (i < numCerts) do
    begin
      cacert := troots.GetCert(i);
      sbDn.Clear();
      sbDn.Append(cacert.SubjectDN);
      if (sbDn.Contains('Entrust.net',caseSensitive) = True) then
        begin
          WriteLn(cacert.SubjectDN);

          //  The alias is an arbitrary unique string for each cert in the JKS.
          sbAlias.Clear();
          sbAlias.Append('cacert_');
          sbAlias.AppendInt(i + 1);
          jks.AddTrustedCert(cacert,sbAlias.GetAsString());
          numAdded := numAdded + 1;
        end;
      cacert.Free;
      i := i + 1;
    end;

  //  Verify the number of certs in the JKS equals the number we added.
  numJksCerts := jks.NumTrustedCerts;
  WriteLn('NumTrustedCerts = ' + numJksCerts);
  if (numJksCerts <> numAdded) then
    begin
      WriteLn('Something is amiss!');
      Exit;
    end;

  //  Save the JKS.
  success := jks.ToFile('myPassword','qa_data/jks/entrust_caCerts.jks');
  if (success <> True) then
    begin
      WriteLn(jks.LastErrorText);
      Exit;
    end;

  WriteLn('Success.');

  //  The output of this program when tested was:

  //  C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority
  //  O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
  //  C=US, O="Entrust, Inc.", OU=www.entrust.net/CPS is incorporated by reference, OU="(c) 2006 Entrust, Inc.", CN=Entrust Root Certification Authority
  //  NumTrustedCerts = 3
  //  Success.


  jks.Free;
  troots.Free;
  sbDn.Free;
  sbAlias.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.