如何在java中获取数字证书的有效期?
我想读取扩展名为.pfx的证书的信息,但加载证书时出现以下错误: 无法解密安全内容条目: javax.crypto.BadPaddingException:给定的最终块不正确 填充 堆栈跟踪:如何在java中获取数字证书的有效期?,java,certificate,pfx,Java,Certificate,Pfx,我想读取扩展名为.pfx的证书的信息,但加载证书时出现以下错误: 无法解密安全内容条目: javax.crypto.BadPaddingException:给定的最终块不正确 填充 堆栈跟踪: (java.lang.StackTraceElement[]) [ sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1304), java.security.KeyStore.load(KeyStore
(java.lang.StackTraceElement[]) [
sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1304),
java.security.KeyStore.load(KeyStore.java:1214),
br.com.certificateutils.CertificatesTest.testLoadCertificateIdeal(CertificatesTest.java:48),
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57),
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
java.lang.reflect.Method.invoke(Method.java:606),
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47),
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12),
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44),
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17),
org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271),
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70),
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50),
org.junit.runners.ParentRunner$3.run(ParentRunner.java:238),
org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63),
org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236),
org.junit.runners.ParentRunner.access$000(ParentRunner.java:53),
org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229),
org.junit.runners.ParentRunner.run(ParentRunner.java:309),
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50),
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38),
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467),
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683),
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390),
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)]
我的代码是:
try{
KeyStore ks = KeyStore.getInstance("pkcs12", "SunJSSE");
InputStream is = new FileInputStream("C:\\certificado.pfx");
ks.load(is, "password".toCharArray()); //line ocorrus error
String alias = ks.aliases().nextElement();
Key key = ks.getKey(alias, "password".toCharArray());
Certificate[] cc = ks.getCertificateChain(alias);
X509Certificate certificate1 = (X509Certificate) cc[0];
ret += certificate1.getNotAfter();
ret += certificate1.getNotBefore();
} catch (Exception e) {
System.out.print(e.getMessage());
}
我的目标是读取证书并获得有效性和唯一标识符。这是代码
KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(newByteArrayInputStream(signature),password.toCharArray());
Enumeration<String> enums = keyStore.aliases();
while (enums.hasMoreElements()) {
String alias = enums.nextElement();
X509Certificate c = (X509Certificate)keyStore.getCertificate(alias);
LocalDateTime expiryDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(c.getNotAfter().getTime()), ZoneId.systemDefault());
}
keystorekeystore=KeyStore.getInstance(“pkcs12”);
load(newByteArrayInputStream(签名),password.toCharArray());
枚举枚举=keyStore.alias();
while(enums.hasMoreElements()){
字符串别名=enums.nextElement();
X509Certificate c=(X509Certificate)keyStore.getCertificate(别名);
LocalDateTime expiryDate=LocalDateTime.ofInstant(Instant.ofEpochMilli(c.getNotAfter().getTime()),ZoneId.systemDefault());
}
可能重复:-@A5l-lE5哦,对不起,我将删除。谢谢。@A5l-lE5我看到的帖子是相同的错误,但不是相同的问题。您同意吗?请检查certificateTest TestLoadCertificateDeal(certificateTest.java:48)中的第48行。我认为它有一些错误。第48行是ks.load(是“password.tocharray());