【问题标题】:Generate random certificates生成随机证书
【发布时间】:2016-06-27 20:06:55
【问题描述】:

我正在寻找一个可以生成随机证书字符串用于测试目的的实用程序类。知道是否已经实施了吗?

【问题讨论】:

    标签: java


    【解决方案1】:

    添加到martijno给出的解决方案中,

    可以使用 JCAContentSigner 来避免映射到 AlgorithmIdentifier(即 OID),而不是编写您自己的内容签名器。

    JcaContentSignerBuilder 采用 here 定义的算法名称。

    X509v3CertificateBuilder certBuilder = new X509v3CertificateBuilder(issuer, serialNumber, startDate, expiryDate, subject, SubjectPublicKeyInfo.getInstance(keyPair.getPublic().getEncoded()));
    JcaContentSignerBuilder builder = new JcaContentSignerBuilder("SHA256withRSA");
    ContentSigner signer = builder.build(keyPair.getPrivate());
    
    byte[] certBytes = certBuilder.build(signer).getEncoded();
    CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
    X509Certificate certificate = (X509Certificate)certificateFactory.generateCertificate(new ByteArrayInputStream(certBytes));
    

    【讨论】:

    • 如果这不是自签名证书,我是否正确,我只是用 CA 的私钥替换私钥?
    【解决方案2】:

    内置的 Java X500 库更倾向于使用证书,而不是生成解析证书。您可能会找到一种方法来做您想做的事,但几乎可以肯定它会很混乱并且在受保护的 API (sun.security.*) 中。

    我建议您包含 Bouncy Castle 库(Apache 许可证)。它有一个名为X509V3CertificateGenerator 的类,您可以使用它来设置证书的字段(颁发者、主题、到期日期等)。

    然后您应该能够使用 PEMWriter 类从中获取 PEM 字符串。

    【讨论】:

    • 请注意,X509V3CertificateGenerator 已被弃用(至少在 Bouncy Castle 1.47 中)。他们建议改用X509v3CertificateBuilder(不是在bcprov,而是在bcpkix jar 中)。
    • 现在它在bcmail jar 中
    • @KeksArmee:它还在bcpkix
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    相关资源
    最近更新 更多