Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中如何从p12获取证书序列号_Java_Xml_Sign - Fatal编程技术网

Java中如何从p12获取证书序列号

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

我需要用证书在Java中对xml进行签名。当我想要得到证书序列号时,我得到空值。我不想使用密钥库,因为我必须在oracle数据库上创建java存储过程,以便使用存储在数据库文件系统上的指定证书对xml进行签名

简短的例子

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())
prints
null
?可以尝试运行:
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());