/*
* GetPKCS12.java
*
* Created on 15. November 2006, 11:18
* This File is part of PortableSigner (http://portablesigner.sf.net/)
* and is under the European Public License V1.1 (http://www.osor.eu/eupl)
* (c) Peter Pfl�ging <peter@pflaeging.net>
*/
package net.pflaeging.PortableSigner;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.UnrecoverableKeyException;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.security.cert.CertificateException;
import java.util.NoSuchElementException;
import java.util.Enumeration;
/**
*
* @author pfp
*/
public class GetPKCS12 {
public static PrivateKey privateKey;
public static Certificate[] certificateChain;
public static String subject;
public static java.math.BigInteger serial;
public static java.util.Date notBefore, notAfter;
public static String issuer;
public static String atEgovOID;
X509Certificate x509cert;
/** Creates a new instance of GetPKCS12 */
public GetPKCS12(String pkcs12FileName,
String pkcs12Password) throws KeyStoreException {
KeyStore ks = null;
FileInputStream fis = null;
if (pkcs12Password == null) {
pkcs12Password="";
}
try {
ks = KeyStore.getInstance("pkcs12");
fis = new FileInputStream(pkcs12FileName);
ks.load(fis, pkcs12Password
.toCharArray());
} catch (NoSuchAlgorithmException e) {
Main.setResult(
java.util.ResourceBundle.getBundle("net/pflaeging/PortableSigner/i18n").getString("ErrorReadingCertificateAlgorythm"),
true,
e.getLocalizedMessage());
} catch (CertificateException e) {
Main.setResult(
java.util.ResourceBundle.getBundle("net/pflaeging/PortableSigner/i18n").getString("ErrorReadingCertificate"),
true,
e.getLocalizedMessage());
} catch (FileNotFoundException e) {
Main.setResult(
java.util.ResourceBundle.getBundle("net/pflaeging/PortableSigner/i18n").getString("ErrorReadingCertificateNotAccessible"),
true,
e.getLocalizedMessage());
} catch (IOException e) {
Main.setResult(
java.util.ResourceBundle.getBundle("net/pflaeging/PortableSigner/i18n").getString("ErrorReadingCertificateIO"),
true,
e.getLocalizedMessage());
} finally {
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
// ignore or print a message
}
}
if (ks != null) {
String alias = "";
try {
// Maybe not only one cert in file! Thanks to Markus Feisst
Enumeration aliases = ks.aliases();
alias = (String) aliases.nextElement();
while (aliases.hasMoreElements() && !ks.isKeyEntry(alias)) {
alias = (String) aliases.nextElement();
}
privateKey = (PrivateKey) ks.getKey(alias, pkcs12Password.toCharArray());
} catch (NoSuchElementException e) {
Main.setResult(
java.util.ResourceBundle.getBundle("net/pflaeging/PortableSigner/i18n").getString("ErrorReadingCertificateNoKey"),
true,
e.getLocalizedMessage());
} catch (NoSuchAlgorithmException e) {
Main.setResult(
java.util.ResourceBundle.getBundle("net/pflaeging/PortableSigner/i18n").getString("ErrorReadingCertificateAlgorythm"),
true, e.getLocalizedMessage());
} catch (UnrecoverableKeyException e) {
Main.setResult(
java.util.ResourceBundle.getBundle("net/pflaeging/PortableSigner/i18n").getString("ErrorReadingCertificateAlgorythm"),
true,
e.getLocalizedMessage());
}
certificateChain = ks.getCertificateChain(alias);
x509cert = (X509Certificate) ks.getCertificate(alias);
subject = x509cert.getSubjectX500Principal().toString();
serial = x509cert.getSerialNumber();
notBefore = x509cert.getNotBefore();
notAfter = x509cert.getNotAfter();
issuer = x509cert.getIssuerX500Principal().toString();
java.util.ResourceBundle oid =
java.util.ResourceBundle.getBundle("net/pflaeging/PortableSigner/SpecialOID");
atEgovOID = "";
for ( Enumeration<String> o = oid.getKeys(); o.hasMoreElements(); ) {
String element = o.nextElement();
// System.out.println(element + ":" + oid.getString(element));
java.util.Collection<String> bCert =x509cert.getNonCriticalExtensionOIDs();
if (bCert != null){
if (bCert.contains(element)) {
if (!atEgovOID.equals("")) { atEgovOID += ", "; }
atEgovOID += oid.getString(element) + " (OID=" + element + ")";
}
}
}
}
}
}