好的,这是另一个“我不知道从哪里开始”的问题,所以希望答案很简单。但是,我真的不知道要搜索什么,而且到目前为止我的尝试并没有多大用处。
我想从(当前在磁盘上的)文件中读取私钥。最终,密钥将驻留在数据库中,但目前这已经足够了,而且这种差异对解析密钥材料没有真正的影响。我已经能够创建一个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
实例对数据进行签名?