Sample code for 30+ languages & platforms
PureBasic

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 PureBasic Downloads

PureBasic
IncludeFile "CkCert.pb"
IncludeFile "CkPrivateKey.pb"
IncludeFile "CkCertChain.pb"
IncludeFile "CkPfx.pb"

Procedure ChilkatExample()

    success.i = 0

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

    pkey.i = CkPrivateKey::ckCreate()
    If pkey.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Load the private key from the file.
    success = CkPrivateKey::ckLoadAnyFormatFile(pkey,"certFile.key","")
    If success <> 1
        Debug CkPrivateKey::ckLastErrorText(pkey)
        CkPrivateKey::ckDispose(pkey)
        ProcedureReturn
    EndIf

    cert.i = CkCert::ckCreate()
    If cert.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; The LoadFromFile method auto-recognizes the format...
    success = CkCert::ckLoadFromFile(cert,"certfile.cer")
    If success <> 1
        Debug CkCert::ckLastErrorText(cert)
        CkPrivateKey::ckDispose(pkey)
        CkCert::ckDispose(cert)
        ProcedureReturn
    EndIf

    ; We'll need a cert chain object to create the PKCS12, so get it
    ; from the cert.  
    certChain.i
    certChain = CkCert::ckGetCertChain(cert)
    If Not CkCert::ckLastMethodSuccess(cert)
        Debug CkCert::ckLastErrorText(cert)
        CkPrivateKey::ckDispose(pkey)
        CkCert::ckDispose(cert)
        ProcedureReturn
    EndIf

    ; Create the PFX object, add the cert and private key, and write to a .pfx file.
    pfx.i = CkPfx::ckCreate()
    If pfx.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; The cert(s) are automatically added in the call to AddPrivateKey
    success = CkPfx::ckAddPrivateKey(pfx,pkey,certChain)
    If success <> 1
        Debug CkPfx::ckLastErrorText(pfx)
        CkPrivateKey::ckDispose(pkey)
        CkCert::ckDispose(cert)
        CkPfx::ckDispose(pfx)
        ProcedureReturn
    EndIf

    ; Write the .pfx to a file.
    password.s = "myPassword"
    success = CkPfx::ckToFile(pfx,password,"certfile.pfx")
    If success <> 1
        Debug CkPfx::ckLastErrorText(pfx)
        CkPrivateKey::ckDispose(pkey)
        CkCert::ckDispose(cert)
        CkPfx::ckDispose(pfx)
        ProcedureReturn
    EndIf

    Debug "Success."


    CkPrivateKey::ckDispose(pkey)
    CkCert::ckDispose(cert)
    CkPfx::ckDispose(pfx)


    ProcedureReturn
EndProcedure