Delphi DLL
Delphi DLL
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 Delphi DLL Downloads
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, JavaKeyStore, PrivateKey, CertChain, Cert;
...
procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
jks: HCkJavaKeyStore;
numTrustedCerts: Integer;
numPrivateKeys: Integer;
cert: HCkCert;
alias: PWideChar;
i: Integer;
privKey: HCkPrivateKey;
certChain: HCkCertChain;
begin
success := False;
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
jks := CkJavaKeyStore_Create();
// 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 := CkJavaKeyStore_LoadFile(jks,'jksFilePassword','/someDir/keyStore.jks');
if (success = False) then
begin
Memo1.Lines.Add(CkJavaKeyStore__lastErrorText(jks));
Exit;
end;
// Find out how many of each type of entry:
numTrustedCerts := CkJavaKeyStore_getNumTrustedCerts(jks);
numPrivateKeys := CkJavaKeyStore_getNumPrivateKeys(jks);
cert := CkCert_Create();
// For each trusted certificate, access it by getting
// it as a cert object. Also get the alias associated with the certificate.
Memo1.Lines.Add('Trusted Certs:');
i := 0;
while i < numTrustedCerts do
begin
success := CkJavaKeyStore_TrustedCertAt(jks,i,cert);
Memo1.Lines.Add(CkJavaKeyStore__getTrustedCertAlias(jks,i) + ': ' + CkCert__subjectDN(cert));
i := i + 1;
end;
privKey := CkPrivateKey_Create();
certChain := CkCertChain_Create();
// 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.
Memo1.Lines.Add('Private Keys:');
i := 0;
while i < numPrivateKeys do
begin
CkJavaKeyStore_PrivateKeyAt(jks,'jksFilePassword',i,privKey);
Memo1.Lines.Add(CkJavaKeyStore__getPrivateKeyAlias(jks,i));
CkJavaKeyStore_CertChainAt(jks,i,certChain);
// The 1st certificate in the chain is the one associated with the private key.
CkCertChain_CertAt(certChain,0,cert);
Memo1.Lines.Add(CkCert__subjectDN(cert));
i := i + 1;
end;
CkJavaKeyStore_Dispose(jks);
CkCert_Dispose(cert);
CkPrivateKey_Dispose(privKey);
CkCertChain_Dispose(certChain);
end;