Мне нужно использовать ws клиент в Node JS для подключения к отдельному серверу WebSocket.
Я могу подключиться с помощью примера программы в моем Chrome, так как я установил самоподписанный Root CA в хранилище доверенных Root центров сертификации на моей машине.
Я знаю, что Node JS использует жестко закодированный список Root CA (глупо), но я я надеялся, что есть какой-то способ импортировать свой собственный.
Я попытался:
export NODE_EXTRA_CA_CERTS=C:\\Users\\IT1\\Documents\\security\\rootCA.pem
- с использованием библиотеки ssl- root -cas , предлагаемой во многих сообщениях на форуме, но я думаю, что она может быть неприменима здесь, поскольку она не меняет https для клиента ws, который я использую. (Я думаю, что сейчас я плевался)
- , используя параметры ca, cert и key, доступные для конструктора WebSocket.
// Using just ca
var test = new WebSocket(uri, {
ca: fs.readFileSync("C:\\Users\\IT1\\Documents\\security\\rootCA.pem")
});
// Using cert and key
var test = new WebSocket(uri, {
cert: fs.readFileSync("C:\\Users\\IT1\\Documents\\security\\rootCA.crt"),
key: fs.readFileSync("C:\\Users\\IT1\\Documents\\security\\rootCA.key")
});
// Using ca, cert and key
var test = new WebSocket(uri, {
ca: fs.readFileSync("C:\\Users\\IT1\\Documents\\security\\rootCA.pem"),
cert: fs.readFileSync("C:\\Users\\IT1\\Documents\\security\\rootCA.crt"),
key: fs.readFileSync("C:\\Users\\IT1\\Documents\\security\\rootCA.key")
});
И Неважно, что Я всегда получаю следующее сообщение об ошибке:
events.js:200
throw er; // Unhandled 'error' event
^
Error: unable to verify the first certificate
at TLSSocket.onConnectSecure (_tls_wrap.js:1321:34)
at TLSSocket.emit (events.js:223:5)
at TLSSocket._finishInit (_tls_wrap.js:794:8)
at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:608:12)
Emitted 'error' event on WebSocket instance at:
at ClientRequest.<anonymous> (C:\Users\IT1\source\repos\WebSocketTest\WebSocketTest\node_modules\ws\lib\websocket.js:554:15)
at ClientRequest.emit (events.js:223:5)
at TLSSocket.socketErrorListener (_http_client.js:406:9)
at TLSSocket.emit (events.js:223:5)
at emitErrorNT (internal/streams/destroy.js:92:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
at processTicksAndRejections (internal/process/task_queues.js:81:21) {
code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE'
}
Кроме того, я не могу использовать rejectUnauthorized: true
. Мне нужно, чтобы он был авторизован, поэтому, пожалуйста, не предлагайте это как решение.
Пожалуйста, помогите, я действительно почесал голову от этого.