Как создать центр сертификации 'CA', используя чистый Javascript Node Js - PullRequest
1 голос
/ 18 июня 2019

Я настраиваю новый сервер ssl и хочу использовать код узла js для создания CA

Я хочу преобразовать эту команду OpenSSL в код NodeJS

openssl genrsa -aes256 -passout pass:123456 -out intermediate/private/client.key.pem 2048
openssl req -config intermediate/openssl.cnf -passin pass:123456 -key intermediate/private/client.key.pem -new -sha256 -out intermediate/csr/client.csr.pem -subj "/C=US/ST=California/L=Mountain View/O=Alice Ltd/OU=Alice Ltd Web Services/CN=client"
openssl ca -batch -config intermediate/openssl.cnf -extensions usr_cert -days 375 -notext -md sha256 -key intermediate -in intermediate/csr/client.csr.pem -out intermediate/certs/client.cert.pem
openssl x509 -noout -text -in intermediate/certs/client.cert.pem
openssl verify -CAfile intermediate/certs/ca-chain.cert.pem intermediate/certs/client.cert.pem

Это как создать сертификат с помощью OpenSSL Центр сертификации OpenSSL

Я попробовал эту библиотеку узлов pem

Это моя закрытая проблема не может создать CSR из закрытого ключа # 244 github

Этот код для генерации privateKey с паролем

var privateKeyOptions = {
    cipher: 'aes256',
    password: '123456'
}

pem.createPrivateKey(2048, privateKeyOptions, function(err, key) {
    console.log(key.key)
    fs.writeFile('/root/ca/intermediate/private/client.key.pem', key.key, function(err) {
         if (err) {
             throw err
          }            
    });

});

Когда я попробовал этот код использовать этот ключ для генерации CSR

var csrOptions = {
    clientKey: '/root/ca/intermediate/private/client.key.pem',
    clientKeyPassword: '123456',
    hash: 'sha256',
    country: 'US',
    state: 'California',
    locality: 'Mountain View',
    organization: 'Alice Ltd',
    organizationUnit: 'Alice Ltd Web Services',
    commonName: 'pass:client',
}

pem.createCSR( csrOptions , function(err, csr) {
    if (err) {
        throw err
    } else {
        console.log(csr.clientKey)
        console.log(csr.csr)
    }

});

Я получаю эту ошибку

/ корень / sslnode / index2.js: 37

с ошибкой ^

Ошибка: неверный код выхода openssl: 1

% openssl req -new -sha256 -config /root/ca/intermediate/openssl.cnf -key / tmp / 54f976cb9cbd0e2dd53b755badb6e6e3fe2256ad -passin файл: / tmp / 3f4640f1134447557555755755755755755755

невозможно загрузить закрытый ключ 140563986715072: ошибка: 0906D06C: процедуры PEM: PEM_read_bio: без запуска> строка: ../ crypto / pem / pem_lib.c: 691: Ожидается: ЛЮБОЙ ЧАСТНЫЙ КЛЮЧ

сделано (/root/sslnode/node_modules/pem/lib/openssl.js:158:27)

в ChildProcess. (/root/sslnode/node_modules/pem/lib/openssl.js:175:7)

в ChildProcess.emit (events.js: 188: 13)

at MaybeClose (внутренний / child_process.js: 978: 16)

at Process.ChildProcess._handle.onexit (internal / child_process.js: 265: 5)

1 Ответ

1 голос
/ 19 июня 2019

После поиска я нашел ошибку в

clientKey: '/root/ca/intermediate/private/client.key.pem',

этот параметр принял строку, а не путь

clientKey: fs.readFileSync('/root/ca/intermediate/private/client.key.pem'),

и не нужно определять openssl.cnf

csrConfigFile: '/root/ca/intermediate/openssl.cnf'
...