Получение открытого ключа из файла CSR с помощью Bouncy Castle на java


У меня есть сгенерированный клиентом CSR-файл, из которого я хочу извлечь открытый ключ. Они предоставили KeyStore Explorer программное обеспечение, чтобы проверить его.

Однако я не могу извлечь открытый ключ из него с помощью инструмента. Как получить открытый ключ из файла CSR с помощью программы Java using BC?

CSR генерируется с помощью RSA 2048, используя SHA1 с RSA.

Из инструмента я могу видеть данные ASN1 открытого ключа, но не формат ASCII. По крайней мере, как я могу использовать данные ASN1, чтобы получить открытый ключ в формате ASCII с использованием BC

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

2 ответа:

Это зависит от того, что вы подразумеваете под "форматом 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. Вам нужны как "провайдер", так и " PKIX/PKCS..."jar (в противном случае вам придется иметь дело с устаревшими API-вызовами).

GetSubjectPublicKeyInfo () не является классом availbale PKCS10CertificationRequest.