Sample code for 30+ languages & platforms
Delphi DLL

Duplicate openssl pkcs12 –export –in certfile.cer –inkey certfile.key –out certfile.pfx

See more OpenSSL Examples

How to create a PKCS12 (.p12 or .pfx) from a certificate file and private key file: Demonstrates how to duplicate this OpenSSL command:
Duplicate openssl pkcs12 –export –in certfile.cer –inkey certfile.key –out certfile.pfx

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Pfx, PrivateKey, CertChain, Cert;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
pkey: HCkPrivateKey;
cert: HCkCert;
certChain: HCkCertChain;
pfx: HCkPfx;
password: PWideChar;

begin
success := False;

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

pkey := CkPrivateKey_Create();

// Load the private key from the file.
success := CkPrivateKey_LoadAnyFormatFile(pkey,'certFile.key','');
if (success <> True) then
  begin
    Memo1.Lines.Add(CkPrivateKey__lastErrorText(pkey));
    Exit;
  end;

cert := CkCert_Create();
// The LoadFromFile method auto-recognizes the format...
success := CkCert_LoadFromFile(cert,'certfile.cer');
if (success <> True) then
  begin
    Memo1.Lines.Add(CkCert__lastErrorText(cert));
    Exit;
  end;

// We'll need a cert chain object to create the PKCS12, so get it
// from the cert.  

certChain := CkCert_GetCertChain(cert);
if (not CkCert_getLastMethodSuccess(cert)) then
  begin
    Memo1.Lines.Add(CkCert__lastErrorText(cert));
    Exit;
  end;

// Create the PFX object, add the cert and private key, and write to a .pfx file.
pfx := CkPfx_Create();

// The cert(s) are automatically added in the call to AddPrivateKey
success := CkPfx_AddPrivateKey(pfx,pkey,certChain);
if (success <> True) then
  begin
    Memo1.Lines.Add(CkPfx__lastErrorText(pfx));
    Exit;
  end;

// Write the .pfx to a file.
password := 'myPassword';
success := CkPfx_ToFile(pfx,password,'certfile.pfx');
if (success <> True) then
  begin
    Memo1.Lines.Add(CkPfx__lastErrorText(pfx));
    Exit;
  end;

Memo1.Lines.Add('Success.');

CkPrivateKey_Dispose(pkey);
CkCert_Dispose(cert);
CkPfx_Dispose(pfx);

end;