Sample code for 30+ languages & platforms
PureBasic

Get the Certificate with Private Key from a Java KeyStore

See more Java KeyStore (JKS) Examples

Load a Chilkat certificate object from a Java KeyStore.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkCert.pb"
IncludeFile "CkCertChain.pb"
IncludeFile "CkJavaKeyStore.pb"
IncludeFile "CkCrypt2.pb"

Procedure ChilkatExample()

    success.i = 0

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

    ; Most of the time a .jks contains one certificate with it's associated private key.
    ; (Similar to how a .pfx/.p12 usually contains a particular certificate with private key.)
    ; This example demonstrates how to get the certificate with private key such that it can be used
    ; by other Chilkat classes wherever a cert w/ private key is needed.
    jks.i = CkJavaKeyStore::ckCreate()
    If jks.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    password.s = "secret"
    success = CkJavaKeyStore::ckLoadFile(jks,password,"qa_data/jks/test_secret.jks")
    If success = 0
        Debug CkJavaKeyStore::ckLastErrorText(jks)
        CkJavaKeyStore::ckDispose(jks)
        ProcedureReturn
    EndIf

    ; Make sure we have a private key.
    If CkJavaKeyStore::ckNumPrivateKeys(jks) < 1
        Debug "No private key available."
        CkJavaKeyStore::ckDispose(jks)
        ProcedureReturn
    EndIf

    ; -------------------------------------------------------------------------
    ; Get the certificate chain associated with the 1st (and probably only) private key in the JKS.

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

    success = CkJavaKeyStore::ckCertChainAt(jks,0,chain)
    If success = 0
        Debug CkJavaKeyStore::ckLastErrorText(jks)
        CkJavaKeyStore::ckDispose(jks)
        CkCertChain::ckDispose(chain)
        ProcedureReturn
    EndIf

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

    success = CkCertChain::ckCertAt(chain,0,cert)
    If success = 0
        Debug CkCertChain::ckLastErrorText(chain)
        CkJavaKeyStore::ckDispose(jks)
        CkCertChain::ckDispose(chain)
        CkCert::ckDispose(cert)
        ProcedureReturn
    EndIf

    ; Verify again that this cert has a private key.
    If CkCert::ckHasPrivateKey(cert) <> 1
        Debug "Certificate has no associated private key."
        CkJavaKeyStore::ckDispose(jks)
        CkCertChain::ckDispose(chain)
        CkCert::ckDispose(cert)
        ProcedureReturn
    EndIf

    ; We now have the cert object with it's associated private key, and it can be used in other Chilkat classes where needed.
    ; For example..

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

    success = CkCrypt2::ckSetSigningCert(crypt,cert)
    If success = 0
        Debug CkCrypt2::ckLastErrorText(crypt)
        CkJavaKeyStore::ckDispose(jks)
        CkCertChain::ckDispose(chain)
        CkCert::ckDispose(cert)
        CkCrypt2::ckDispose(crypt)
        ProcedureReturn
    EndIf

    ; ...
    ; ...


    CkJavaKeyStore::ckDispose(jks)
    CkCertChain::ckDispose(chain)
    CkCert::ckDispose(cert)
    CkCrypt2::ckDispose(crypt)


    ProcedureReturn
EndProcedure