【问题标题】:SecurityException: BC provider not installedSecurityException:未安装 BC 提供程序
【发布时间】:2013-10-19 13:26:16
【问题描述】:

使用BouncyCastle编写代码生成数字证书。

这是导致问题的代码的基本部分。

public X509Certificate generateCertWithKeypair(KeyPair caPair)
            throws InvalidKeyException, SecurityException, SignatureException {
        X509V3CertificateGenerator v3CertGen = new X509V3CertificateGenerator();
        v3CertGen
                .setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));
        v3CertGen
                .setIssuerDN(new X509Principal("CN=cn, O=o, L=L, ST=il, C= c"));
        v3CertGen.setNotBefore(new Date(System.currentTimeMillis() - 1000L * 60
                * 60 * 24));
        v3CertGen.setNotAfter(new Date(System.currentTimeMillis()
                + (1000L * 60 * 60 * 24 * 365 * 10)));
        v3CertGen
                .setSubjectDN(new X509Principal("CN=cn, O=o, L=L, ST=il, C= c"));
        v3CertGen.setPublicKey(caPair.getPublic());
        v3CertGen.setSignatureAlgorithm("SHA1WithRSAEncryption");
        X509Certificate generateX509Certificate = v3CertGen
                .generateX509Certificate(caPair.getPrivate());//**here**
        return generateX509Certificate;
    }

面对异常

Exception in "main" java.lang.SecurityException: BC provider not installed!
    at X509V3CertificateGenerator.generateX509Certificate(Unknown Source)
    at chapter4.Dupe.generateCertWithKeypair(Dupe.java:74)
    at chapter4.Dupe.main(Dupe.java:32)

在搜索我 found 最新的 jar 解决了问题,但没有运气。

我错过了什么吗?

See Full Code Here.

【问题讨论】:

  • Security.addProvider(new BouncyCastleProvider())

标签: java security encryption cryptography bouncycastle


【解决方案1】:

您应该在 JRE 中“注册”BC。您可以通过两种方式做到这一点:将 bcprov.jar 放入 $JRE/lib/ext 文件夹并添加 $JRE/lib/security/java.security

security.provider.N=org.bouncycastle.jce.provider.BouncyCastleProvider

或者把bcprov.jar放到classpath中,不要修改java.security,而是在某处添加代码

static { Security.addProvider(new BouncyCastleProvider());  }

http://www.bouncycastle.org/wiki/display/JA1/Provider+Installation

【讨论】:

  • 我所做的是在 lib 文件夹中添加了充气城堡 jar。但没有解决。添加此行后,它已注册。谢谢。
【解决方案2】:

我遇到了类似的问题,添加到已接受的答案中,这是对我有用的解决方案。

解决方案 1: 更新 JRE/lib/security/java.security

security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider
security.provider.2=org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
security.provider.3=sun.security.provider.Sun
security.provider.4=sun.security.rsa.SunRsaSign
security.provider.5=com.sun.net.ssl.internal.ssl.Provider
security.provider.6=com.sun.crypto.provider.SunJCE
security.provider.7=sun.security.jgss.SunProvider
security.provider.8=com.sun.security.sasl.Provider

BC 库需要位于顶部 (1&2)

解决方案 2: 在项目中添加

static {
 if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
                
       Security.insertProviderAt(new BouncyCastleProvider(), 1);
  }

 if (Security.getProvider(BouncyCastleJsseProvider.PROVIDER_NAME) == null) {
                Security.insertProviderAt(new BouncyCastleJsseProvider(), 2);
 }
}

【讨论】:

    猜你喜欢
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 2022-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多