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

Import a PFX/P12 into the Windows Certificate Stores

See more Certificates Examples

Demonstrates how to import the certificates contained in a .pfx/.p12 to the Windows certificate stores.

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.Pfx,
  Chilkat.JsonObject;

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

procedure RunDemo;
var
  success: Boolean;
  pfx: TPfx;
  exportable: Boolean;
  userProtected: Boolean;
  machineKeyset: Boolean;
  allowOverwriteKey: Boolean;
  allowExport: Boolean;
  leafStore: string;
  intermediateStore: string;
  rootStore: string;
  json: TJsonObject;

begin
  success := False;

  pfx := TPfx.Create;

  success := pfx.LoadPfxFile('qa_data/pfx/example.p12','p12Password');
  if (success = False) then
    begin
      WriteLn(pfx.LastErrorText);
      Exit;
    end;

  //  See the online reference documentation for more information about the ImportToWindows method.

  //  Mark imported privae keys as exportable.
  exportable := True;

  //  If userProtected is True, the user is to be notified through a dialog box or other method when certain attempts to use this key are made. 
  userProtected := False;

  //  If machineKeyset is True, the private keys are stored under the local computer and not under the current user. 
  machineKeyset := False;

  //  If allowOverwriteKey is True, allow overwrite of the existing key. 
  allowOverwriteKey := False;

  //  If allowExport is True, then the imported key can later be exported back to a PFX.
  //  (It also allows for applications to directly access the private key material.)
  allowExport := True;

  //  Indicate where to import types of certs.
  leafStore := 'My';
  intermediateStore := 'CertificationAuthority';
  rootStore := 'AuthRoot';

  success := pfx.ImportToWindows(exportable,userProtected,machineKeyset,allowOverwriteKey,allowExport,leafStore,intermediateStore,rootStore,'');
  if (success = False) then
    begin
      WriteLn(pfx.LastErrorText);
      Exit;
    end;

  //  Show information about the certificates imported
  json := TJsonObject.Create;
  pfx.GetLastJsonData(json);

  json.EmitCompact := False;
  WriteLn(json.Emit());

  //  Sample of the last JSON data:

  //  {
  //    "exportable": true,
  //    "userProtected": false,
  //    "machineKeyset": false,
  //    "allowOverwriteKey": false,
  //    "allowExport": true,
  //    "key": [
  //      {
  //        "name": "{F09B755A-1E90-444D-9851-02B86CA14961}",
  //        "storageProvider": "Microsoft Software Key Storage Provider"
  //      }
  //    ],
  //    "cert": [
  //      {
  //        "DN": "...",
  //        "type": "intermediate",
  //        "storeName": "CertificationAuthority",
  //        "imported": true
  //      },
  //      {
  //        "DN": "...",
  //        "type": "root",
  //        "storeName": "AuthRoot",
  //        "imported": true
  //      },
  //      {
  //        "DN": "....",
  //        "type": "leaf",
  //        "storeName": "My",
  //        "keyContainer": "{345D4EAD-B8DD-4150-9A1F-4BC6437E77A2}",
  //        "machineKeyset": true,
  //        "imported": true
  //      }
  //    ]
  //  }

  WriteLn('Success.');


  pfx.Free;
  json.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.