public KeyInfo load(String password) throws CertificateException, IOException, KeyStoreException, NoSuchAlgorithmException
    {
        FileInputStream fin = null;
        
        try {
            char[] psw = password.toCharArray();
            String alias = "";
            this.keyInfo = null;
            fin = new FileInputStream( file );

            // Load key store
            this.keyStore = KeyStore.getInstance( "JKS" );
            this.keyStore.load( fin, psw );
            
            // Get the certificate from the keystore
            if ( this.keyStore.size() > 0 ) {
                alias = this.keyStore.aliases().nextElement();
                X509Certificate cert = (X509Certificate) this.keyStore.getCertificate( alias );
                X500Principal principal = cert.getSubjectX500Principal();
                X500Name x500Info = X500Name.asX500Name( principal );
                // Now, lets decode it

                // Dump the info from the guts of the cert library
                this.keyInfo = new KeyInfo(
                                    alias,
                                    x500Info.getCommonName(),
                                    x500Info.getOrganizationalUnit(),
                                    x500Info.getOrganization(),
                                    x500Info.getLocality(),
                                    x500Info.getState(),
                                    x500Info.getCountry(),
                                    password
                );
            }
        }
        finally {
            if ( fin != null ) {
                fin.close();
            }
        }
        
        return this.keyInfo;
    }