6

を使用してデジタル証明書を生成するコードを記述し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)

検索で、最新のjarが問題を解決することがわかりまし たが、うまくいきません。

何か不足していますか?

ここで完全なコードを参照してください。

4

2 に答える 2

10

BC を JRE に「登録」する必要があります。$JRE/lib/ext フォルダーに bcprov.jar を配置し、$JRE/lib/security/java.security行に追加します。

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

またはbcprov.jarをクラスパスに配置し、java.securityを変更せずにコードをどこかに追加します

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

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

于 2013-10-11T13:48:30.160 に答える