PrivateKey Создано OpenSSL для объекта RSACRTPrivateKey

Есть файл privateKey в формате PEM, сгенерированный следующей командой Openssl для генерации .csr,

openssl req -newkey rsa:2048 -nodes -out %~dp0\req.csr -keyout %~dp0\..\private.key -sha256 -config %~dp0\..\cfg.cfg

Теперь я хотел бы получить китайскую теорему об остатках - ключевой объект из этого файла. Но сейчас я не успешный юнит. Так что, может быть, вы можете помочь мне.

1 ответ

Решение

Я не уверен, что вам нужно решение только для BC (LWAPI?) Или вы будете использовать JCE, который может использовать Sun или поставщика BC. Если последнее:

Пары ключей RSA, сгенерированные и написанные openssl, всегда имеют форму CRT, если вы не усердно работаете, чтобы предотвратить это, и req не делает. Для openssl 1.0.0+ файл приватного ключа из req -newkey (и большинство других вещей) - PKCS#8, содержащий PKCS # 1 CRT; в старых версиях это "устаревшая" PKCS # 1 CRT, и ее необходимо переформатировать в PKCS#8, проще всего с помощью (редактировать) openssl pkcs8 -topk8 -nocrypt -in *file* -out *file* [-outform der] (см. далее) PKCS # 8 может быть и часто шифруется, но req -newkey -nodes незашифрован, и поэтому pkcs8 -nocrypt,

JCE может читать (редактировать) незашифрованный DER PKCS#8, содержащий PKCS#1 CRT (среди прочего). Проще преобразовать PEM в DER с помощью openssl, поскольку это простая командная строка (особенно если она сочетается с унаследованным преобразованием в PKCS#8, см. Выше); затем в Java:

  • читать (редактировать) незашифрованный PKCS#8 DER в byte[] скажем buffer а также
  • передать это java.security.KeyFactory.getInstance("RSA"[,provider]) .generatePrivate(buffer) (или эквивалент).

Результат имеет тип, зависящий от провайдера, но в любом случае он реализует интерфейс java.security.interfaces.RSAPrivateCrtKey,

JCE не делает PEM сам. Если у вас есть PEM, прочитайте его, зачистите строки BEGIN/END, преобразуйте оставшиеся base64 в байты, затем перейдите к JCE.

Другие вопросы по тегам