Sample code for 30+ languages & platforms
Xbase++ Requires Chilkat v11.0.0+

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 Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oJks
LOCAL cPassword
LOCAL oChain
LOCAL oCert
LOCAL oCrypt

nSuccess := 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.
oJks := CreateObject("Chilkat.JavaKeyStore")
cPassword := "secret"
nSuccess := oJks:LoadFile(cPassword, "qa_data/jks/test_secret.jks")
IF (nSuccess == 0)
    ? oJks:LastErrorText
    oJks:destroy()
    RETURN
ENDIF

//  Make sure we have a private key.
IF (oJks:NumPrivateKeys < 1)
    ? "No private key available."
    oJks:destroy()
    RETURN
ENDIF

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

oChain := CreateObject("Chilkat.CertChain")
nSuccess := oJks:CertChainAt(0, oChain)
IF (nSuccess == 0)
    ? oJks:LastErrorText
    oJks:destroy()
    oChain:destroy()
    RETURN
ENDIF

oCert := CreateObject("Chilkat.Cert")
nSuccess := oChain:CertAt(0, oCert)
IF (nSuccess == 0)
    ? oChain:LastErrorText
    oJks:destroy()
    oChain:destroy()
    oCert:destroy()
    RETURN
ENDIF

//  Verify again that this cert has a private key.
IF (oCert:HasPrivateKey() != 1)
    ? "Certificate has no associated private key."
    oJks:destroy()
    oChain:destroy()
    oCert:destroy()
    RETURN
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..

oCrypt := CreateObject("Chilkat.Crypt2")
nSuccess := oCrypt:SetSigningCert(oCert)
IF (nSuccess == 0)
    ? oCrypt:LastErrorText
    oJks:destroy()
    oChain:destroy()
    oCert:destroy()
    oCrypt:destroy()
    RETURN
ENDIF

//  ...
//  ...

oJks:destroy()
oChain:destroy()
oCert:destroy()
oCrypt:destroy()