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