BasicX509Credential
не является частью стандартной Java;Я полагаю, вы говорите о org.opensaml.xml.security.x509.BasicX509Credential
из OpenSAML.
Вы хотите PrivateKey
, который вы установите с credential.setPrivateKey()
.Чтобы получить PrivateKey
, вы должны сначала преобразовать закрытый ключ в формат, который может прочитать Java, а именно PKCS # 8:
openssl pkcs8 -topk8 -nocrypt -outform DER < D:\host.key > D:\host.pk8
Затем из Java:
RandomAccessFile raf = new RandomAccessFile("d:\\host.pk8", "r");
byte[] buf = new byte[(int)raf.length()];
raf.readFully(buf);
raf.close();
PKCS8EncodedKeySpec kspec = new PKCS8EncodedKeySpec(buf);
KeyFactory kf = KeyFactory.getInstance("RSA");
PrivateKey privKey = kf.generatePrivate(kspec);
и вуаля!у вас есть PrivateKey
.
По умолчанию openssl
записывает ключ в своем собственном формате (для ключей RSA PKCS # 8 оказывается оберткой вокруг этого формата), и он кодирует их в PEM, который Base64 с верхним и нижним колонтитулом.Обе характеристики не поддерживаются простой Java, следовательно, преобразование в PKCS # 8.Параметр -nocrypt
обусловлен тем, что PKCS # 8 поддерживает необязательное шифрование секретного ключа на основе пароля.
Предупреждение: вы действительно действительно хотите использовать более длинный ключ RSA,512 бит слабые;512-битный ключ RSA был взломан в 1999 году с несколькими сотнями компьютеров.В 2011 году, с 12-летним технологическим прогрессом, следует предположить, что 512-битный ключ RSA может быть взломан почти любым.Поэтому используйте 1024-битные ключи RSA как минимум (предпочтительно, 2048-битные; вычислительные затраты при использовании ключа не так уж и плохи, вы все равно сможете выполнять сотни подписей в секунду).