Создана для использования с https клиентом.
Небольшой размер достигнут за счёт отсутствия информации в issuer и subject.
Принимает два параметра:
key: int длинна модуля ключа (1024, 2048, 4096)
sign: int длинна подписи sha (1, 256, 384, 512)
На выходе: object
key: string приватный ключ в pem формате
cert: string сертификат в pem формате
Более полная реализация поддерживающая версию 3, генерацию полей в issuer и subject, ограниченную реализацию extensions.
- В extensions доступны только altName
- В altName реализованны: dNSName, iPAddress, rfc822Name, uniformResourceIdentifier
- Подпись: sha 1, 256, 384, 512
Возможны три сценария использования:
- Генерация цепочки сертификатов (root, srv)
- Генерация одного сертификата (srv) и указание в параметрах пути к приватному ключу и сертификату (root), который подпишет srv сертификат
- Генерация одного сертификата
Параметры: object
Обязательными являються: type, sign, curve (для ecdsa), lenght (для rsa)
{
srv: {
type: 'ecdsa',
curve: 'sect239k1',
sign: 'SHA256',
serial: 123,
validity: {
notBefore: '2020-12-12',
notAfter: '2033-12-12',
},
subject: {
countryName: 'EA',
stateOrProvinceName: 'EARTH',
organizationName: 'DO_NOT_TRUST',
commonName: '*.example.ru',
},
altName: [
['dNSName', 'www.example.ru'],
['iPAddress', '127.0.0.1'],
['iPAddress', '1234:5678:9000:abcd:9876:5432:10ab:cdef'],
],
altName: {dNSName: 'www.example.ru'},
},
root: {
type: 'rsa',
lenght: 2048,
sign: 256,
serial: '321',
validity: {
notBefore: '2000-01-01',
notAfter: '3000-12-31',
},
issuer: {
countryName: 'EA',
stateOrProvinceName: 'EARTH',
organizationName: 'DO_NOT_TRUST',
commonName: 'DO_NOT_TRUST_LOCAL_ROOT',
},
subject: {
countryName: 'EA',
stateOrProvinceName: 'EARTH',
organizationName: 'DO_NOT_TRUST',
commonName: 'DO_NOT_TRUST_LOCAL_ROOT',
},
},
root: {
key: './RootCA.key',
cert: './RootCA.pem',
},
path: './new_cert',
prefix: Date.now(),
}
{
type: 'ecdsa',
curve: 'sect239k1',
sign: 'SHA256',
serial: 123,
validity: {
notBefore: '2020-12-12',
notAfter: '2033-12-12',
},
issuer: {
countryName: 'EA',
stateOrProvinceName: 'EARTH',
organizationName: 'DO_NOT_TRUST',
commonName: 'DO_NOT_TRUST_LOCAL_ROOT',
},
subject: {
countryName: 'EA',
stateOrProvinceName: 'EARTH',
organizationName: 'DO_NOT_TRUST',
commonName: '*.example.ru',
},
altName: [
['dNSName', 'www.example.ru'],
['iPAddress', '127.0.0.1'],
['iPAddress', '1234:5678:9000:abcd:9876:5432:10ab:cdef'],
],
path: './new_cert',
prefix: Date.now(),
}
На выходе: object
для цепочки:
{
root: {
key: string pem format
cert: string pem format
},
srv: {
key: string pem format
cert: string pem format
},
}
для внешнего root:
{
srv: {
key: string pem format
cert: string pem format
},
}
для одиночного:
{
key: string pem format
cert: string pem format
}
Фаилы:
crt в формате der (бинарный), остальные в pem (текстовый)
для цепочки:
PREFIX_root_certificate.crt
PREFIX_root_certificate.pem
PREFIX_root_private.pem
PREFIX_srv_certificate.crt
PREFIX_srv_certificate.pem
PREFIX_srv_private.pem
для внешнего root:
PREFIX_srv_certificate.crt
PREFIX_srv_certificate.pem
PREFIX_srv_private.pem
для одиночного:
PREFIX_certificate.crt
PREFIX_certificate.pem
PREFIX_private.pem