ОК, это еще один из тех вопросов "Я не знаю, с чего начать", поэтому, надеюсь, ответ прост. Тем не менее, я действительно не знаю, что искать, и мои попытки до сих пор не очень полезны.
Я хочу прочитать закрытый ключ из файла (в настоящее время на диске). В конечном итоге ключ будет находиться в базе данных, но на данный момент это будет достаточно хорошим, и эта разница не должна иметь никакого реального отношения к разбору ключевого материала. Я смог создать экземпляр 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
для подписи данных?