Sample code for 30+ languages & platforms
PowerBuilder

Get Certificates from .p12 / .pfx

See more PFX/P12 Examples

A PKCS12 (.p12 / .pfx) is a container for holding a certificate, its private key, and the certs in the chain of authentication up to and possibly including the root CA cert. A .p12 is not required to contain certain things. It will contain whatever the creator of the .p12 decided to include. It's possible to contain just a private key, just a cert, many certs without private keys, or many certs with many private keys. Usually, a .p12 contains one certificate, its associated private key, and certificates in the chain of authentication.

Chilkat PowerBuilder Downloads

PowerBuilder
integer li_rc
integer li_Success
oleobject loo_Pfx
oleobject loo_Cert
integer li_NumCerts
integer i
oleobject loo_Issuer

li_Success = 0

loo_Pfx = create oleobject
li_rc = loo_Pfx.ConnectToNewObject("Chilkat.Pfx")
if li_rc < 0 then
    destroy loo_Pfx
    MessageBox("Error","Connecting to COM object failed")
    return
end if

li_Success = loo_Pfx.LoadPfxFile("qa_data/pfx/test.pfx","pfx_password")
if li_Success = 0 then
    Write-Debug loo_Pfx.LastErrorText
    destroy loo_Pfx
    return
end if

// Iterate over the certs contained in the PFX
loo_Cert = create oleobject
li_rc = loo_Cert.ConnectToNewObject("Chilkat.Cert")

li_NumCerts = loo_Pfx.NumCerts
i = 0
do while i < li_NumCerts

    loo_Pfx.CertAt(i,loo_Cert)

    Write-Debug "--- " + string(i) + " ---"
    Write-Debug loo_Cert.SubjectDN
    // Is this a root cert, or self-signed?
    Write-Debug "Root: " + string(loo_Cert.IsRoot)
    Write-Debug "Self-Signed: " + string(loo_Cert.SelfSigned)

    // If this certificate is not the root (self-signed), then get the issuer.
    // If the issuing certificate is contained in the PFX, then it will be found here..
    if loo_Cert.SelfSigned <> 1 then
        loo_Issuer = loo_Cert.FindIssuer()
        if loo_Cert.LastMethodSuccess = 0 then
            Write-Debug "Issuer not found."
        else
            Write-Debug "Issuer: " + loo_Issuer.SubjectDN
            destroy loo_Issuer
        end if

    end if

    i = i + 1
loop

// Usually, the user certificate is at index 0, its issuer is at index 1, etc. until we get to the root certificate.


destroy loo_Pfx
destroy loo_Cert