Java中如何从p12获取证书序列号
我需要用证书在Java中对xml进行签名。当我想要得到证书序列号时,我得到空值。我不想使用密钥库,因为我必须在oracle数据库上创建java存储过程,以便使用存储在数据库文件系统上的指定证书对xml进行签名 简短的例子Java中如何从p12获取证书序列号,java,xml,sign,Java,Xml,Sign,我需要用证书在Java中对xml进行签名。当我想要得到证书序列号时,我得到空值。我不想使用密钥库,因为我必须在oracle数据库上创建java存储过程,以便使用存储在数据库文件系统上的指定证书对xml进行签名 简短的例子 KeyStore p12 = KeyStore.getInstance("pkcs12"); p12.load(new FileInputStream("c:/cert/mycert.p12"), "PASSWORD".toCharArray()); Enumeration e
KeyStore p12 = KeyStore.getInstance("pkcs12");
p12.load(new FileInputStream("c:/cert/mycert.p12"), "PASSWORD".toCharArray());
Enumeration e = p12.aliases();
String alias = (String) e.nextElement();
System.out.println("Alias certifikata:" + alias);
Key privateKey = p12.getKey(alias, "PASSWORD".toCharArray());
KeyStore.PrivateKeyEntry keyEntry
= (KeyStore.PrivateKeyEntry) p12.getEntry(alias, new KeyStore.PasswordProtection("Geslo123#".toCharArray()));
X509Certificate cert = (X509Certificate) keyEntry.getCertificate();
System.out.println("cert name:" + cert.getSubjectX500Principal().getName());
System.out.println("cert serial number: " + cert.getSerialNumber());
我必须在签名(签名xml)中提供序列号和发卡机构名称
所以要清楚,
System.out.println(“证书序列号:”+cert.getSerialNumber())
printsnull
?可以尝试运行:keytool-list-storetype pkcs12-keystore my_debug_keystore.p12-storepass debug
或keytool-v-list-storetype pkcs12-keystore my_debug_keystore.p12-storepass debug
?您应该会得到这样一个结果,其中包含序列号:别名:2创建日期:2014年8月17日条目类型:PrivateKeyEntry证书链长度:1证书[1]:所有者:CN=sixminute,OU=,O=,C=IE发行者:CN=sixminute,OU=,O=,C=IE序列号:2D36231639353A313636365303163613333A2D3030有效期:。。。
KeyInfoFactory keyInfoFactory = sigFactory.getKeyInfoFactory();
X509IssuerSerial x509IssuerSerial = keyInfoFactory.newX509IssuerSerial(cert.getSubjectX500Principal().getName(), cert.getSerialNumber());