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

Get the Certificate with Private Key from a Java KeyStore

See more Java KeyStore (JKS) Examples

Load a Chilkat certificate object from a Java KeyStore.

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.JavaKeyStore,
  Chilkat.CertChain,
  Chilkat.Cert,
  Chilkat.Crypt2;

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

procedure RunDemo;
var
  success: Boolean;
  jks: TJavaKeyStore;
  password: string;
  chain: TCertChain;
  cert: TCert;
  crypt: TCrypt2;

begin
  success := False;

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

  //  Most of the time a .jks contains one certificate with it's associated private key.
  //  (Similar to how a .pfx/.p12 usually contains a particular certificate with private key.)
  //  This example demonstrates how to get the certificate with private key such that it can be used
  //  by other Chilkat classes wherever a cert w/ private key is needed.
  jks := TJavaKeyStore.Create;
  password := 'secret';
  success := jks.LoadFile(password,'qa_data/jks/test_secret.jks');
  if (success = False) then
    begin
      WriteLn(jks.LastErrorText);
      Exit;
    end;

  //  Make sure we have a private key.
  if (jks.NumPrivateKeys < 1) then
    begin
      WriteLn('No private key available.');
      Exit;
    end;

  //  -------------------------------------------------------------------------
  //  Get the certificate chain associated with the 1st (and probably only) private key in the JKS.

  chain := TCertChain.Create;
  success := jks.CertChainAt(0,chain);
  if (success = False) then
    begin
      WriteLn(jks.LastErrorText);
      Exit;
    end;

  cert := TCert.Create;
  success := chain.CertAt(0,cert);
  if (success = False) then
    begin
      WriteLn(chain.LastErrorText);
      Exit;
    end;

  //  Verify again that this cert has a private key.
  if (cert.HasPrivateKey() <> True) then
    begin
      WriteLn('Certificate has no associated private key.');
      Exit;
    end;

  //  We now have the cert object with it's associated private key, and it can be used in other Chilkat classes where needed.
  //  For example..

  crypt := TCrypt2.Create;
  success := crypt.SetSigningCert(cert);
  if (success = False) then
    begin
      WriteLn(crypt.LastErrorText);
      Exit;
    end;

  //  ...
  //  ...


  jks.Free;
  chain.Free;
  cert.Free;
  crypt.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.