java.security.cert.CertificateParsingException:签名字段无效 - java

我正在尝试阅读X509 certificate

FileInputStream fr = new FileInputStream("suresh.pfx");
CertificateFactory cf =   CertificateFactory.getInstance("X509");
X509Certificate c = (X509Certificate) cf.generateCertificate(fr); 

并运行到异常

java.security.cert.CertificateParsingException: signed fields invalid
    at sun.security.x509.X509CertImpl.parse(Unknown Source)
    at sun.security.x509.X509CertImpl.<init>(Unknown Source)
    at sun.security.provider.X509Factory.engineGenerateCertificate(Unknown Source)
    at java.security.cert.CertificateFactory.generateCertificate(Unknown Source)
    at com.nextenders.certificategeenrator.CertificateGenerator.testGenerateSignCertWithKeyStore(CertificateGenerator.java:102)
    at com.nextenders.certificategeenrator.CertificateGenerator.main(CertificateGenerator.java:65)

无法解决,从Oracle forum找到了与此相关的内容。

有什么提示吗?

参考方案

PFX本身不是证书,而是密钥库。

要获取证书,您必须将pfx加载到密钥库中,然后获取证书:

InputStream certIs=new FileInputStream("suresh.pfx");
Keystore ks=KeyStore.getInstance("PKCS12");
ks.load(certIs.getInputStream(),"password".toCharArray());
Certificate cert=ks.getCertificate("alias");

问候

具有对称密钥的RSA - java

我的客户要求我使用带有对称密钥的RSA加密某些数据。我对RSA的全部了解是,它被用作非对称密钥算法。我已经搜索过类似的东西,但没有找到。那有可能吗?如果是,是否有Java实现(JCE提供程序)?提前致谢。 参考方案 您的客户端可能意味着基于RSA的密钥传输协议,该协议使用RSA 非对称密钥来“包装”对称密码的对称密钥,该对称密钥将用于加密两个通信方之间的进一…

春季安全值得付出努力 - java

我一直在关注春季安全性,并注意到它是多么大的包装。我想知道是否值得花一些时间来加强这一点。Spring Security 2.0+为您节省了大量时间,还是以任何方式简化了您的项目? java参考方案 几年前,我考虑将其用于Spring项目,并选择了它,因为它是一个非常繁琐的框架,恕我直言,它提供的灵活性不是必需的。 (据我估计)减少我们自己的身份验证/授权的…

在Java源代码中隐藏密码 - java

我需要在源代码中隐藏密码,为了降低反编译的风险,有哪些可能的方法来混淆密码?例如final String password = "secret"; 参考方案 首先,我不会将变量命名为password。其次,我不会将其保留为原始格式,而是对其进行编码。第三,我将使用char[]而不是String(因为字符串驻留在字符串池中)。当然,最好的选…

Java等同于SecureString - java

我正在寻找Java等效于.NET的SecureString.aspx。 2018年有这样的实施方案吗?OWASP implementation并不完全相同,因为它只是一个纯字符数组。 .NET等效项提供了additional features,例如从非托管内存中获取实例的能力以及加密功能。我知道常见的Java模式,它会以char[]的形式传递密码,并在使用后…

为什么加载个人密钥库需要这么多时间? - java

我使用下面的代码从Java中的个人密钥库获取证书,但该语句ksp.load(null,null)需要14秒才能执行,我无法弄清楚为什么以及如何减少它。我可以使用证书签署pdf文档,但是整个过程需要1分钟,我希望是1秒。SunMSCAPI SunProvider=new SunMSCAPI(); Security.addProvider(SunProvider…