P10产生证书 添加扩展项

P10产生证书 添加扩展项

/**
*

  • @param entityKey - public key of the requesting GW
  • @param caKey
  • @param caCert
  • @return
  • @throws Exception
    */
    public static X509CertificateHolder buildEndEntityCert(X500Name subject,
    AsymmetricKeyParameter entityKey, AsymmetricKeyParameter caKey,
    X509CertificateHolder caCert, String ufn) throws Exception
    {
    SubjectPublicKeyInfo entityKeyInfo = SubjectPublicKeyInfoFactory.
    createSubjectPublicKeyInfo(entityKey);
    if(subject==null)
    subject = new X500Name(“CN = BETaaS Gateway Certificate”);
    X509v3CertificateBuilder certBldr = new X509v3CertificateBuilder(
    caCert.getSubject(),
    BigInteger.valueOf(1),
    new Date(System.currentTimeMillis()),
    new Date(System.currentTimeMillis() + VALIDITY_PERIOD),
    subject,
    entityKeyInfo);
    X509ExtensionUtils extUtils = new X509ExtensionUtils(
    new SHA1DigestCalculator());
    certBldr.addExtension(Extension.authorityKeyIdentifier, false,
    extUtils.createAuthorityKeyIdentifier(caCert))
    .addExtension(Extension.subjectKeyIdentifier, false,
    extUtils.createSubjectKeyIdentifier(entityKeyInfo))
    .addExtension(Extension.basicConstraints, true,
    new BasicConstraints(false))
    .addExtension(Extension.keyUsage, true, new KeyUsage(
    KeyUsage.digitalSignature | KeyUsage.keyEncipherment))
    .addExtension(Extension.subjectAlternativeName, false, new GeneralNames(
    new GeneralName(GeneralName.rfc822Name, ufn)));
    AlgorithmIdentifier sigAlg = algFinder.find(ALG_NAME);
    AlgorithmIdentifier digAlg = new DefaultDigestAlgorithmIdentifierFinder().find(sigAlg);
    ContentSigner signer = new BcECDSAContentSignerBuilder(sigAlg, digAlg).build(caKey);
    return certBldr.build(signer);
    }

private X509AttributeCertificateHolder createAttrCert() throws Exception
{
X509CertificateHolder iCertHolder = new X509CertificateHolder(holderCert);
//
// a sample key pair.
//
// RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(
// new BigInteger(
// “b4a7e46170574f16a97082b22be58b6a2a629798419be12872a4bdba626cfae9900f76abfb12139dce5de56564fab2b6543165a040c606887420e33d91ed7ed7”,
// 16), new BigInteger(“11”, 16));
X509v2AttributeCertificateBuilder gen = new X509v2AttributeCertificateBuilder(
new AttributeCertificateHolder(iCertHolder.getSubject()),
new AttributeCertificateIssuer(new X500Name(“cn=test”)),
BigInteger.ONE,
new Date(System.currentTimeMillis() - 50000),
new Date(System.currentTimeMillis() + 50000));
// the actual attributes
GeneralName roleName = new GeneralName(GeneralName.rfc822Name,
“[email protected]”);
ASN1EncodableVector roleSyntax = new ASN1EncodableVector();
roleSyntax.add(roleName);
// roleSyntax OID: 2.5.24.72
gen.addAttribute(new ASN1ObjectIdentifier(“2.5.24.72”), new DERSequence(roleSyntax));
AlgorithmIdentifier sigAlg = sigAlgFinder.find(“SHA1withRSA”);
AlgorithmIdentifier digAlg = digAlgFinder.find(sigAlg);
ContentSigner sigGen = new BcRSAContentSignerBuilder(sigAlg, digAlg).build(RSA_PRIVATE_KEY_SPEC);
Target targetName = new Target(Target.targetName, new GeneralName(GeneralName.dNSName,
“www.test.com”));
Target targetGroup = new Target(Target.targetGroup, new GeneralName(
GeneralName.directoryName, “o=Test, ou=Test”));
Target[] targets = new Target[2];
targets[0] = targetName;
targets[1] = targetGroup;
TargetInformation targetInformation = new TargetInformation(targets);
gen.addExtension(Extension.targetInformation, true, targetInformation);
return gen.build(sigGen);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java的Bouncy Castle库来实现产生P10请求和证书的生成。以下是一个简单的示例代码: ```java import java.io.FileOutputStream; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.SecureRandom; import java.security.Security; import java.security.cert.X509Certificate; import java.util.Date; import javax.security.auth.x500.X500Principal; import org.bouncycastle.asn1.x500.X500Name; import org.bouncycastle.asn1.x500.style.BCStyle; import org.bouncycastle.asn1.x509.AlgorithmIdentifier; import org.bouncycastle.asn1.x509.Extension; import org.bouncycastle.asn1.x509.ExtensionsGenerator; import org.bouncycastle.cert.X509CertificateHolder; import org.bouncycastle.cert.X509v3CertificateBuilder; import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter; import org.bouncycastle.cert.jcajce.JcaX509CertificateHolder; import org.bouncycastle.cert.jcajce.JcaX509ExtensionUtils; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.operator.ContentSigner; import org.bouncycastle.operator.OperatorCreationException; import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; public class P10CertificateGenerator { public static void main(String[] args) throws Exception { Security.addProvider(new BouncyCastleProvider()); // Generate key pair KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", "BC"); keyPairGenerator.initialize(2048, new SecureRandom()); KeyPair keyPair = keyPairGenerator.generateKeyPair(); // Generate P10 request PKCS10CertificationRequestBuilder p10Builder = new JcaPKCS10CertificationRequestBuilder( new X500Name("CN=Test"), keyPair.getPublic()); JcaContentSignerBuilder csBuilder = new JcaContentSignerBuilder("SHA256withRSA"); ContentSigner signer = csBuilder.build(keyPair.getPrivate()); PKCS10CertificationRequest p10Request = p10Builder.build(signer); // Generate certificate X500Name issuer = new X500Name("CN=Test CA"); X500Name subject = new X500Name("CN=Test"); BigInteger serial = BigInteger.valueOf(System.currentTimeMillis()); Date notBefore = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000); Date notAfter = new Date(System.currentTimeMillis() + 365 * 24 * 60 * 60 * 1000); X509v3CertificateBuilder certBuilder = new X509v3CertificateBuilder(issuer, serial, notBefore, notAfter, subject, keyPair.getPublic()); ExtensionsGenerator extGen = new ExtensionsGenerator(); JcaX509ExtensionUtils extUtils = new JcaX509ExtensionUtils(); extGen.addExtension(Extension.subjectKeyIdentifier, false, extUtils.createSubjectKeyIdentifier(keyPair.getPublic())); extGen.addExtension(Extension.authorityKeyIdentifier, false, extUtils.createAuthorityKeyIdentifier(keyPair.getPublic())); certBuilder.addExtension(extGen.generate()); AlgorithmIdentifier sigAlgId = new AlgorithmIdentifier(new ASN1ObjectIdentifier("1.2.840.113549.1.1.11")); AlgorithmIdentifier digAlgId = new AlgorithmIdentifier(new ASN1ObjectIdentifier("2.16.840.1.101.3.4.2.1")); ContentSigner certSigner = new JcaContentSignerBuilder("SHA256withRSA").build(keyPair.getPrivate()); X509CertificateHolder certHolder = certBuilder.build(certSigner); X509Certificate cert = new JcaX509CertificateConverter().getCertificate(certHolder); // Save P10 request and certificate to files FileOutputStream p10Out = new FileOutputStream("p10.req"); p10Out.write(p10Request.getEncoded()); p10Out.close(); FileOutputStream certOut = new FileOutputStream("cert.crt"); certOut.write(cert.getEncoded()); certOut.close(); } } ``` 这个示例代码使用RSA算法生成2048位的密钥对,然后使用Bouncy Castle库生成P10请求和证书。P10请求和证书都被保存到文件中。注意,这个示例代码中的证书是自签名的,如果需要使用CA签名的证书,需要使用CA的私钥来签名证书

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值