好的,这是又一个那种“我真的不知道从哪里开始”的问题,希望答案很简单。然而,我不知道要搜索什么,到目前为止我的尝试也没有找到太多有用的东西。
我想从一个(当前在磁盘上)文件中读取私钥。最终该密钥将驻留在数据库中,但就解析密钥材料而言,这应该已经足够了,因此这种差异不会产生任何实际影响。我已经能够创建一个包含密钥公共部分的Credential
实例(由调试器确认),但我似乎无法弄清楚如何读取私有部分。密钥对是这样生成的:
openssl genrsa 512 > d:\host.key
openssl req -new -x509 -nodes -sha1 -days 365 -key d:\host.key > d:\host.cert
(是的,我知道512位RSA密钥很久以前就已经被破解了。然而,为了尝试让API正常工作,我认为没有必要无谓地耗尽系统熵供应。)
到目前为止,代码如下:
import org.opensaml.xml.security.credential.Credential;
import org.opensaml.xml.security.x509.BasicX509Credential;
private Credential getSigningCredential()
throws java.security.cert.CertificateException, IOException {
BasicX509Credential credential = new BasicX509Credential();
credential.setUsageType(UsageType.SIGNING);
// read public key
InputStream inStream = new FileInputStream("d:\\host.cert");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream);
inStream.close();
credential.setEntityCertificate(cert);
// TODO: read private key
// done.
return credential;
}
但是我该如何将文件 host.key
读入到 credential
的私钥部分中,以便我可以使用生成的 Credential
实例对数据进行签名?