Функция KEYUTIL.getPEM из библиотеки
Jsrsasign предназначена для экспорта криптографических
ключей и сертификатов в формат PEM (Privacy-Enhanced Mail). Этот формат
является текстовым представлением бинарных данных, закодированных в
Base64 и обрамлённых служебными заголовками.
PEM широко используется в TLS/SSL, PKI-инфраструктуре, JWT-подписях и других криптографических сценариях.
KEYUTIL.getPEM(keyObj, formatType, passwd, encAlg, hexType)
Параметры:
keyObj — объект ключа (RSA, EC, DSA, X.509 и др.)formatType — тип PEM-форматаpasswd — пароль (используется при шифровании приватного
ключа)encAlg — алгоритм шифрования (например,
"AES-256-CBC")hexType — дополнительный параметр для некоторых типов
ключейФункция принимает следующие типы:
RSAKey)ECDSA)X509)var pubKeyPEM = KEYUTIL.getPEM(pubKeyObj, "PKCS8PUB");
Результат:
-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----
Используется для распространения открытых ключей.
var prvKeyPEM = KEYUTIL.getPEM(prvKeyObj, "PKCS1PRV");
Формат:
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
Подходит для старых систем и OpenSSL.
var pem = KEYUTIL.getPEM(prvKeyObj, "PKCS8PRV");
Формат:
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
Современный универсальный формат.
var pem = KEYUTIL.getPEM(prvKeyObj, "PKCS8PRV", "password123", "AES-256-CBC");
Формат:
-----BEGIN ENCRYPTED PRIVATE KEY-----
...
-----END ENCRYPTED PRIVATE KEY-----
Особенности:
var certPEM = KEYUTIL.getPEM(x509Obj);
Формат:
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Используется в HTTPS, TLS, цифровых подписях.
var keypair = KEYUTIL.generateKeypair("RSA", 2048);
var prvPEM = KEYUTIL.getPEM(keypair.prvKeyObj, "PKCS8PRV");
var pubPEM = KEYUTIL.getPEM(keypair.pubKeyObj, "PKCS8PUB");
var encryptedPEM = KEYUTIL.getPEM(
keypair.prvKeyObj,
"PKCS8PRV",
"strongPassword",
"AES-256-CBC"
);
Ключевые моменты:
Без пароля ключ хранится в открытом виде
С паролем — защищён от утечек
Алгоритмы шифрования:
| Характеристика | PKCS#1 | PKCS#8 |
|---|---|---|
| Поддержка ключей | Только RSA | Универсальный |
| Структура | Простая | ASN.1 обёртка |
| Шифрование | Ограниченное | Гибкое |
| Совместимость | OpenSSL | Современные системы |
PKCS#8 рекомендуется для новых проектов.
var ecKey = KEYUTIL.generateKeypair("EC", "secp256r1");
var pem = KEYUTIL.getPEM(ecKey.prvKeyObj, "PKCS8PRV");
Результат:
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
Для EC-ключей PKCS#8 — основной формат.
var x509 = new X509();
x509.readCertPEM(certPEM);
var pubKeyObj = x509.getPublicKey();
var pubPEM = KEYUTIL.getPEM(pubKeyObj);
var pem = KEYUTIL.getPEM(asn1Obj, "CERTIFICATE");
Используется при ручной сборке криптографических структур.
1. Неверный formatType
KEYUTIL.getPEM(keyObj, "WRONG_FORMAT");
Результат — ошибка или некорректный PEM.
2. Отсутствие пароля при шифровании
KEYUTIL.getPEM(keyObj, "PKCS8PRV", null, "AES-256-CBC");
Шифрование не произойдёт.
3. Использование неподходящего объекта
Передача строки вместо объекта ключа:
KEYUTIL.getPEM("string", "PKCS8PRV");
Требуется объект (RSAKey, ECDSA, и
т.д.)
Функция выполняет несколько этапов:
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASC...
...
-----END PRIVATE KEY-----
Особенности:
PEM, сгенерированный через KEYUTIL.getPEM, полностью
совместим с OpenSSL:
openssl rsa -in key.pem -text
KEYUTIL.getPEMФункция KEYUTIL.getPEM является ключевым инструментом
для взаимодействия с внешними криптографическими системами и
стандартами.