好的,这是另一个“我没有真正想法从哪里开始”的问题,所以希望答案很简单。但是,我并不知道要搜索什么,而迄今为止我的尝试并没有发挥太大的作用。如何读取用于OpenSAML的私钥?
我想读从(目前上盘)文件中的私钥。最终,密钥将驻留在数据库中,但这一点足够好,而且这种差异对解析密钥材料没有任何真正的影响。我已经能够创建一个拥有公钥部分(由调试器确认)的实例,但我似乎无法弄清楚如何读取私有部分。生成密钥对为:
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
实例签名数据?
是,BasicX509Credential是OpenSAML,我们对此深感抱歉监督。我一定会试试这个。是的,我完全清楚,512位RSA密钥并不是安全的,但是这个特殊的设置完全是为了试图让所有东西都能正常工作,所以密钥长度并不是问题。 – 2011-03-08 14:31:02
似乎像一个魅力工作,非常感谢你!当然,我的签名代码似乎被破坏了,但至少根据调试器,我从磁盘上的两个文件中获得了适当的“Credential”。在旅途中... – 2011-03-08 14:45:07
谢谢。我在Windows上重定向< and >时遇到了很多麻烦,所以可能需要使用-in和-out开关替换它们。 – 2013-02-19 17:30:25