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