Sample code for 30+ languages & platforms
PureBasic

Install PFX Certificates and Private Keys to Windows

See more PFX/P12 Examples

Demonstrates how to install the certificates and private keys contained in a PFX to the Windows certificate stores.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkPfx.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

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

    success = CkPfx::ckLoadPfxFile(pfx,"qa_data/pfx/test_secret.pfx","secret")
    If success = 0
        Debug CkPfx::ckLastErrorText(pfx)
        CkPfx::ckDispose(pfx)
        ProcedureReturn
    EndIf

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

    ; Mark imported privae keys as exportable.
    exportable.i = 1

    ; If userProtected is 1, the user is to be notified through a dialog box or other method when certain attempts to use this key are made. 
    userProtected.i = 0

    ; If machineKeyset is 1, the private keys are stored under the local computer and not under the current user. 
    machineKeyset.i = 0

    ; If allowOverwriteKey is 1, allow overwrite of the existing key. 
    allowOverwriteKey.i = 0

    ; If allowExport is 1, 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.i = 1

    ; Indicate where to import types of certs.
    leafStore.s = "My"
    intermediateStore.s = "CertificationAuthority"
    rootStore.s = "AuthRoot"

    success = CkPfx::ckImportToWindows(pfx,exportable,userProtected,machineKeyset,allowOverwriteKey,allowExport,leafStore,intermediateStore,rootStore,"")
    If success = 0
        Debug CkPfx::ckLastErrorText(pfx)
        CkPfx::ckDispose(pfx)
        ProcedureReturn
    EndIf

    ; Show information about the certificates imported
    json.i = CkJsonObject::ckCreate()
    If json.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkPfx::ckGetLastJsonData(pfx,json)

    CkJsonObject::setCkEmitCompact(json, 0)
    Debug CkJsonObject::ckEmit(json)

    ; Sample output:

    ; {
    ;   "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
    ;     }
    ;   ]
    ; }

    Debug "Success."


    CkPfx::ckDispose(pfx)
    CkJsonObject::ckDispose(json)


    ProcedureReturn
EndProcedure