【问题标题】:How to get validity date the digital certificate in java?java中如何获取数字证书的有效期?
【发布时间】:2014-03-15 12:14:32
【问题描述】:

我想读取扩展名为 .pfx 的证书信息,但加载证书时出现此错误:

未能解密安全内容条目: javax.crypto.BadPaddingException:给定最终块不正确 填充

堆栈跟踪:

 (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());
         }

我的目标是读取证书并获得有效性和​​唯一标识符。

【问题讨论】:

  • @A5l-lE5 哦,对不起,我会删除。谢谢。
  • @A5l-lE5 我看到帖子是同样的错误,但不是同一个问题。你同意吗?
  • 从certificateTest testLoadCertificateIdeal(CertificatesTest.java:48)中检查第48行。我认为它有一些错误
  • 第 48 行是 ks.load(is, "password".toCharArray());

标签: java certificate pfx


【解决方案1】:

这里是代码

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());
        }

【讨论】:

    猜你喜欢
    • 2015-07-15
    • 2020-10-19
    • 2010-11-16
    • 2014-04-23
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多