JavaでBCを使用してX509証明書を生成するためのサンプルまたはチュートリアルがあります。Bouncy Castle Javaを使用したX509証明書の生成
多くの例で、廃止予定のAPIを使用しています。私はBCを見ましたが、どのクラスが適切なドキュメンテーション/例を提供しているかを示していません。
ご存知の方は、私がBCを使ってX509証明書を生成できるチュートリアルを教えてください。 [公開鍵と秘密鍵の生成とファイルへの書き込み]
JavaでBCを使用してX509証明書を生成するためのサンプルまたはチュートリアルがあります。Bouncy Castle Javaを使用したX509証明書の生成
多くの例で、廃止予定のAPIを使用しています。私はBCを見ましたが、どのクラスが適切なドキュメンテーション/例を提供しているかを示していません。
ご存知の方は、私がBCを使ってX509証明書を生成できるチュートリアルを教えてください。 [公開鍵と秘密鍵の生成とファイルへの書き込み]
X509v3CertificateBuilderは、使用するクラスのようです。 bouncycastle wikiに新しいAPIを使用した例がいくつかあります。 KeyPairGeneratorのの
私が聞く@GregSを安心させる[です高価な](http://en.wikipedia.org/wiki/Reassuringly_Expensive)時間で雇う。 –
作成:鍵ペアの
private KeyPairGenerator createKeyPairGenerator(String algorithmIdentifier,
int bitCount) throws NoSuchProviderException,
NoSuchAlgorithmException {
KeyPairGenerator kpg = KeyPairGenerator.getInstance(
algorithmIdentifier, BouncyCastleProvider.PROVIDER_NAME);
kpg.initialize(bitCount);
return kpg;
}
作成:PEMに物事を変換する
private KeyPair createKeyPair(String encryptionType, int byteCount)
throws NoSuchProviderException, NoSuchAlgorithmException
{
KeyPairGenerator keyPairGenerator = createKeyPairGenerator(encryptionType, byteCount);
KeyPair keyPair = keyPairGenerator.genKeyPair();
return keyPair;
}
KeyPair keyPair = createKeyPair("RSA", 4096);
(ファイルに書き込むことができます):のX509Certificateの
private String convertCertificateToPEM(X509Certificate signedCertificate) throws IOException {
StringWriter signedCertificatePEMDataStringWriter = new StringWriter();
JcaPEMWriter pemWriter = new JcaPEMWriter(signedCertificatePEMDataStringWriter);
pemWriter.writeObject(signedCertificate);
pemWriter.close();
return signedCertificatePEMDataStringWriter.toString();
}
作成:
X509v3CertificateBuilder certificateBuilder = new JcaX509v3CertificateBuilder(
serverCertificate, new BigInteger("1"),
new Date(System.currentTimeMillis()),
new Date(System.currentTimeMillis() + 30L * 365L * 24L * 60L * 60L * 1000L),
jcaPKCS10CertificationRequest.getSubject(),
jcaPKCS10CertificationRequest.getPublicKey()
/*).addExtension(
new ASN1ObjectIdentifier("2.5.29.35"),
false,
new AuthorityKeyIdentifier(keyPair.getPublic().getEncoded())*/
).addExtension(
new ASN1ObjectIdentifier("2.5.29.19"),
false,
new BasicConstraints(false) // true if it is allowed to sign other certs
).addExtension(
new ASN1ObjectIdentifier("2.5.29.15"),
true,
new X509KeyUsage(
X509KeyUsage.digitalSignature |
X509KeyUsage.nonRepudiation |
X509KeyUsage.keyEncipherment |
X509KeyUsage.dataEncipherment));
署名:
ContentSigner sigGen = new JcaContentSignerBuilder("SHA1withRSA").build(signingKeyPair.getPrivate());
X509CertificateHolder x509CertificateHolder = certificateBuilder.build(sigGen);
org.spongycastle.asn1.x509.Certificate eeX509CertificateStructure =
x509CertificateHolder.toASN1Structure();
return eeX509CertificateStructure;
}
private X509Certificate readCertificateFromASN1Certificate(
org.spongycastle.asn1.x509.Certificate eeX509CertificateStructure,
CertificateFactory certificateFactory)
throws IOException, CertificateException { //
// Read Certificate
InputStream is1 = new ByteArrayInputStream(eeX509CertificateStructure.getEncoded());
X509Certificate signedCertificate =
(X509Certificate) certificateFactory.generateCertificate(is1);
return signedCertificate;
}
のCertificateFactory:
certificateFactory = CertificateFactory.getInstance("X.509",
BouncyCastleProvider.PROVIDER_NAME);
がhttp://stackoverflow.com/questions/9938079/generating-x509certificate-using-bouncycastle-x509v3certificatebuilder – Abhi