【问题标题】:Getting Public Key from the CSR file using Bouncy Castle in java在 java 中使用 Bouncy Castle 从 CSR 文件中获取公钥
【发布时间】:2013-02-06 09:22:14
【问题描述】:

我有一个客户端生成的 CSR 文件,我想从中提取公钥。 他们提供了 KeyStore Explorer 软件来检查它。

但是我无法使用该工具从中提取公钥。如何使用 BC 使用 Java 程序从 CSR 文件中获取公钥?

CSR 是使用 RSA 2048 生成的,使用 SHA1 和 RSA。

从工具中,我可以看到公钥的 ASN1 数据,但看不到 ASCII 格式。 至少我如何使用 ASN1 数据使用 BC 获取 ASCII 格式的公钥

SEQUENCE
{
    SEQUENCE
    {
        OBJECT IDENTIFIER=RSA encryption (1.2.840.113549.1.1.1)
        NULL
    }
    BIT STRING= //BITS HERE
}

【问题讨论】:

    标签: java rsa bouncycastle public-key-encryption


    【解决方案1】:

    这取决于您所说的“ASCII 格式”是什么意思。但通常你可以这样做:

    // Read the CSR
    FileReader fileReader = new FileReader("/path/to/your.csr");
    PemReader pemReader = new PemReader(fileReader);
    
    PKCS10CertificationRequest csr = 
        new PKCS10CertificationRequest(pemReader.readPemObject().getContent());
    
    pemReader.close();
    fileReader.close();
    
    // Write the Public Key as a PEM-File
    StringWriter output = new StringWriter();
    PemWriter pemWriter = new PemWriter(output);
    
    PemObject pkPemObject = new PemObject("PUBLIC KEY", 
        csr.getSubjectPublicKeyInfo().getEncoded());
    
    pemWriter.writeObject(pkPemObject);
    pemWriter.close();
    
    System.out.println(output.getBuffer());
    
    // Extract the Public Key as "RSAKeyParameters" so you can use for
    // encryption/signing operations.
    RSAKeyParameters pubkey = 
        (RSAKeyParameters)PublicKeyFactory.createKey(csr.getSubjectPublicKeyInfo());
    

    这是您将获得的:

    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxlRixVjOXAmUQ2zORREO
    VSQDQejyjWzT3bDznPltiPMwM3SOmPmZyrB8jF3iFvzdFge1QG2WdDj7PzmysXNL
    /1xRa0efWv8nURx1eV86hvU6ThNqY3WPyYYXSjTcN74uhGSJo7d5zG6JSL4Cj+l4
    RO+nh/5Pa8438ufS+9hXndKPFT2aub9roKysxWpsctpNoOIjfyxkLv9Z9sqxuggG
    nwYkwYmoDjPAQp2gRpCp7Hw5F6jSkA33NR5S/aPdyvzKZDbuoRdAl2sTubL1TLG3
    nC6tetGsmFRRkNiJjPSNtbXXtN6RB2eJL0epyaFFLksFBaL6nvYIgB1uqFroUY15
    2QIDAQAB
    -----END PUBLIC KEY-----
    

    我已经使用最新版本的 BC-provider 对此进行了测试。您需要“provider”和“PKIX/PKCS...”jar(否则您必须处理已弃用的 API 调用)。

    【讨论】:

      【解决方案2】:

      getSubjectPublicKeyInfo() 不可用 PKCS10CertificationRequest 类。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多