2013-02-21 797 views
2

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

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

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

从工具中,我可以看到公钥的ASN1数据,但不是ASCII格式。 ATLEAST我怎么使用ASN1数据得到使用BC

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

回答

2

ASCII格式的公钥这取决于你所说的“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-提供的最新版本测试了这个。您需要“提供者”和“PKIX/PKCS ...”jar(否则您必须处理弃用的API调用)。

0

getSubjectPublicKeyInfo()不是availbale PKCS10CertificationRequest类。

+0

此答案已过时,请参阅bc源代码: http://grepcode.com/file/repo1.maven.org/maven2/org.bouncycastle/bcpkix-jdk15on/1.52/org/bouncycastle/pkcs/PKCS10CertificationRequest.java #PKCS10CertificationRequest.getSubjectPublicKeyInfo%28%29 – jforge 2016-04-01 11:24:29

相关问题