ASN.1 тип PrintableString используется в криптографических структурах для представления строк, ограниченных набором допустимых символов. В спецификации ASN.1 (Abstract Syntax Notation One) этот тип относится к базовым строковым типам и предназначен для хранения текстовых данных, которые должны быть максимально совместимы между различными системами и протоколами.
В контексте формата DER (Distinguished Encoding Rules) объект DERPrintableString представляет собой конкретную реализацию кодирования PrintableString в библиотеке Jsrsasign. Он обеспечивает строгую сериализацию строки в бинарный формат ASN.1 DER, который используется в сертификатах X.509, CMS, PKCS и других криптографических структурах.
PrintableString допускает только ограниченный набор символов:
' ( ) + , - . / : = ?Любые другие символы считаются недопустимыми и приведут к ошибке при кодировании или некорректному результату в криптографических структурах.
Это ограничение критично для совместимости между различными реализациями ASN.1, особенно в сертификатах X.509.
В библиотеке Jsrsasign класс
KJUR.asn1.DERPrintableString является одним из примитивов
ASN.1 и используется для создания узлов дерева ASN.1, которые затем
могут быть включены в более сложные структуры:
Объект выполняет задачу преобразования JavaScript-строки в DER-кодированное представление PrintableString.
Базовая сигнатура конструктора:
new KJUR.asn1.DERPrintableString(params)
Объект params может содержать следующие поля:
Пример:
var asn1 = new KJUR.asn1.DERPrintableString({
str: "JOHN DOE"
});
При создании объекта происходит несколько этапов обработки:
Строка анализируется на соответствие PrintableString. Если встречается недопустимый символ (например, кириллица или символы Unicode вне допустимого набора), выбрасывается ошибка.
PrintableString имеет фиксированный тег:
Формируется структура:
[Tag][Length][Value]
Где:
var KJUR = require("jsrsasign");
var ps = new KJUR.asn1.DERPrintableString({
str: "TEST USER"
});
console.log(ps.getEncodedHex());
Результатом будет DER-кодированная строка в шестнадцатеричном виде.
PrintableString часто используется для полей сертификатов, например:
Пример включения в ASN.1 последовательность:
var seq = new KJUR.asn1.DERSequence({
array: [
new KJUR.asn1.DERPrintableString({ str: "RU" }),
new KJUR.asn1.DERPrintableString({ str: "My Company" })
]
});
Если строка содержит недопустимые символы:
new KJUR.asn1.DERPrintableString({
str: "Тест"
});
поведение зависит от параметра ignoreError:
ignoreError: true → возможна некорректная кодировка или
замена символовВ Jsrsasign существуют альтернативы:
Ключевое отличие PrintableString — баланс между совместимостью и ограничением символов. Он чаще используется в стандартизированных полях сертификатов, где важна предсказуемость кодировки.
Возвращает DER-представление в hex формате:
var hex = ps.getEncodedHex();
Возвращает строковое представление объекта (в основном для отладки).
Объект участвует в сборке дерева ASN.1 через внутренние методы Jsrsasign и может быть включён в:
DERPrintableString активно используется в:
Например, при генерации subject полей:
Используется в инфраструктуре открытых ключей для хранения метаданных, которые должны быть строго стандартизированы.
PrintableString гарантирует корректное взаимодействие с реализациями OpenSSL, поскольку DER-кодирование строго соответствует RFC 5280.
Это главный источник ошибок при использовании:
При попытке кодировать неподдерживаемый текст возможны:
PrintableString не является универсальным типом строки и не подходит для пользовательского ввода без предварительной нормализации.
В Jsrsasign все DER-объекты формируют иерархию:
DERSequence
├── DERPrintableString
├── DERInteger
├── DERBitString
DERPrintableString всегда является листовым узлом, не содержащим вложенных структур.