Sample code for 30+ languages & platforms
Objective-C

Load Java KeyStore and Access Contents

See more Java KeyStore (JKS) Examples

Loads a Java keystore file and iterates over the contents. A Java keystore (.jks) file can contain one or more trusted root certificate entries and/or one or more private key entries. Each private key entry includes an associated certificate chain.

Chilkat Objective-C Downloads

Objective-C
#import <CkoJavaKeyStore.h>
#import <CkoCert.h>
#import <NSString.h>
#import <CkoPrivateKey.h>
#import <CkoCertChain.h>

BOOL success = NO;

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

CkoJavaKeyStore *jks = [[CkoJavaKeyStore alloc] init];

//  Load the Java keystore from a file.  The JKS file password is used
//  to verify the keyed digest that is found at the very end of the keystore.
//  It verifies there has been no tampering with the file.
success = [jks LoadFile: @"jksFilePassword" path: @"/someDir/keyStore.jks"];
if (success == NO) {
    NSLog(@"%@",jks.LastErrorText);
    return;
}

//  Find out how many of each type of entry:
int numTrustedCerts = [jks.NumTrustedCerts intValue];
int numPrivateKeys = [jks.NumPrivateKeys intValue];

CkoCert *cert = [[CkoCert alloc] init];
NSString *alias = 0;

//  For each trusted certificate, access it by getting
//  it as a cert object.  Also get the alias associated with the certificate.
NSLog(@"%@",@"Trusted Certs:");
int i = 0;
while (i < numTrustedCerts) {
    success = [jks TrustedCertAt: [NSNumber numberWithInt: i] cert: cert];
    NSLog(@"%@%@%@",[jks GetTrustedCertAlias: [NSNumber numberWithInt: i]],@": ",cert.SubjectDN);
    i = i + 1;
}

CkoPrivateKey *privKey = [[CkoPrivateKey alloc] init];
CkoCertChain *certChain = [[CkoCertChain alloc] init];

//  For each private key entry, get the private key and
//  the associated certificate chain.
//  Each private key is password protected.  Usually it is the same
//  password as used for the keyed digest of the entire JKS.  
//  However, this does not have to be.  The password is passed
//  here to handle the possibility of each private key requiring
//  a different password.
NSLog(@"%@",@"Private Keys:");
i = 0;
while (i < numPrivateKeys) {
    [jks PrivateKeyAt: @"jksFilePassword" index: [NSNumber numberWithInt: i] privKey: privKey];
    NSLog(@"%@",[jks GetPrivateKeyAlias: [NSNumber numberWithInt: i]]);
    [jks CertChainAt: [NSNumber numberWithInt: i] certChain: certChain];

    //  The 1st certificate in the chain is the one associated with the private key.
    [certChain CertAt: [NSNumber numberWithInt: 0] cert: cert];
    NSLog(@"%@",cert.SubjectDN);

    i = i + 1;
}