3

クライアントによって生成された CSR ファイルがあり、そこから公開キーを抽出したいと考えています。彼らはそれをチェックするために KeyStore Explorer ソフトウェアを提供しました。

ただし、ツールを使用して公開鍵を抽出することはできません。BCを使用してJavaプログラムを使用してCSRファイルから公開鍵を取得するにはどうすればよいですか?

CSR は、RSA で SHA1 を使用して、RSA 2048 で生成されます。

ツールから、公開鍵の ASN1 データを確認できますが、ASCII 形式は確認できません。少なくとも、ASN1 データを使用して BC を使用して ASCII 形式の公開鍵を取得するにはどうすればよいですか

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

2 に答える 2

4

「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 呼び出しに対処する必要があります)。

于 2013-02-21T07:44:43.930 に答える
0

getSubjectPublicKeyInfo() は利用できない PKCS10CertificationRequest クラスです。

于 2013-05-24T09:40:07.890 に答える