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

Convert PEM to JKS (Java KeyStore)

See more PEM Examples

Converts a PEM containing private key(s) and certificates into a JKS (Java KeyStore) formatted file.

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.Pem,
  Chilkat.JavaKeyStore;

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

procedure RunDemo;
var
  success: Boolean;
  pem: TPem;
  password: string;
  pemContent: string;
  alias: string;
  jksPassword: string;
  jks: TJavaKeyStore;

begin
  success := False;

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

  pem := TPem.Create;

  //  Load the PEM from a file.
  //  If the PEM is encrypted, provide a password.  Otherwise pass an empty string for the password.
  password := 'myPassword';
  success := pem.LoadPemFile('../myPemFiles/myPem.pem',password);
  if (success = False) then
    begin
      WriteLn(pem.LastErrorText);
      Exit;
    end;

  //  Note: If the app already has the PEM pre-loaded in a string variable, then load it 
  //  by calling LoadPem instead.  
  pemContent := '... the PEM contents ...';
  success := pem.LoadPem(pemContent,password);
  //  Check for success as before..

  //  Convert to a JavaKeyStore object.
  //  The alias, if a non-empty string, will be applied to the 1st private key or 
  //  certificate.  All other keys and/or certificates will be assigned an auto-generated
  //  alias.
  alias := 'anything_I_want_here';

  //  This is the passord that will be required to access the created JKS.
  jksPassword := 'myJksSecret';
  jks := TJavaKeyStore.Create;
  success := pem.ToJksObj(alias,jksPassword,jks);
  if (success = False) then
    begin
      WriteLn(pem.LastErrorText);
      Exit;
    end;

  //  Save the JKS to a file.  The password passed here is used for the keyed hash of the
  //  entire JKS file.  This may be different (if desired) than the password for individual private keys
  //  contained within the JKS.  
  success := jks.ToFile(jksPassword,'../myJksFiles/myJks.jks');
  if (success = False) then
    begin
      WriteLn(jks.LastErrorText);
      Exit;
    end;


  pem.Free;
  jks.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.