npm ws - Zertifikat - error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt

GustlPC

Lt. Junior Grade
Registriert
Nov. 2008
Beiträge
338
Hallo zusammen,

Ich habe folgenden node.js code:

Javascript:
const fs = require('fs');
const https = require('https');
const WebSocketS = require('ws');

var cfg = {
  port: 3301,
  portssl: 3302,
  ssl_key: 'G:/inetpub/wwwroot/ewp-dev.domain.com/websocket-server/cert/ewp-dev.doamin.com.key',
  ssl_cert: 'G:/inetpub/wwwroot/ewp-dev.domain.com/websocket-server/cert/S00024EJ_ewp-dev.doamin.com.cer'
};

const https_app = require("express")();

https_app.get('/', (req, res) => {
  res.send('Hello World!');
});

console.log(fs.readFileSync(cfg.ssl_cert, 'utf8'));
console.log(fs.readFileSync(cfg.ssl_key, 'utf8'));

const serverS = https.createServer({
  cert: fs.readFileSync(cfg.ssl_cert, 'utf8'),
  key: fs.readFileSync(cfg.ssl_key, 'utf8')
}, https_app);
const wss = new WebSocketS.Server({ serverS });

wss.on('connection', socket => {
  socket.on('message', data => {
    const jsondata = JSON.parse( data );
    if( typeof(jsondata.clientname) !== 'undefined'){
      socket.clientname = jsondata.clientname;
    }
    else{
      SendToClientsWs(jsondata);
    }

    console.log((new Date()) + "Client connected:" + data);
  });

});

Folgende Fehlermeldung kommt bei der Ausführung:
Code:
_tls_common.js:151
      c.context.setKey(key, passphrase);
                ^

Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
←[90m    at Object.createSecureContext (_tls_common.js:151:17)←[39m
←[90m    at Server.setSecureContext (_tls_wrap.js:1155:27)←[39m
←[90m    at Server (_tls_wrap.js:1033:8)←[39m
←[90m    at new Server (https.js:65:14)←[39m
←[90m    at Object.createServer (https.js:89:10)←[39m
    at Object.<anonymous> (G:\inetpub\wwwroot\ewp-dev.domain.com\websocket-serv
er\test.js:21:23)
←[90m    at Module._compile (internal/modules/cjs/loader.js:959:30)←[39m
←[90m    at Object.Module._extensions..js (internal/modules/cjs/loader.js:995:10
)←[39m
←[90m    at Module.load (internal/modules/cjs/loader.js:815:32)←[39m
←[90m    at Function.Module._load (internal/modules/cjs/loader.js:727:14)←[39m {

  opensslErrorStack: [
    ←[32m'error:0907B00D:PEM routines:PEM_read_bio_PrivateKey:ASN1 lib'←[39m,
    ←[32m'error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe cryp
t error'←[39m,
    ←[32m'error:23077074:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 cipherfinal err
or'←[39m
  ],
  library: ←[32m'digital envelope routines'←[39m,
  function: ←[32m'EVP_DecryptFinal_ex'←[39m,
  reason: ←[32m'bad decrypt'←[39m,
  code: ←[32m'ERR_OSSL_EVP_BAD_DECRYPT'←[39m
}

Es scheint irgendetwas mit der Entschlüsselung beim Key nicht zu stimmen. Also liegt es an openssl.

Habe aber keine Idee was ich nun machen muss.
Vielleicht kann hier jemand helfen?

Betriebssystem ist Windows Server 2012 R2, node.js ist neu installiert.
Habe es aber auch schon auf einem Linux probiert --> selbes ergebnis.

Vielen Dank im Voraus.

Edit: Key und Cert lassen sich mit dem Editor ganz normal öffnen, und schauen auch ziemlich "normal" für mich aus.

Zertifikat wurde wie folgt erstellt:
openssl req -new -newkey rsa:2048 -sha256 -out ewp-dev.domain.com.csr -keyout ewp-dev.domain.com.key -subj "/C=DE/ST=Bayern/L=Stadt/O=Firma/OU=DI FA APS MF/CN=ewp-dev.domain.com/emailAddress=hans.mustermax@domain.com"

Es wurde für pem noch ein Passwort vergeben. Könnte es daran liegen? Wenn ja, wie kann ich das beim key in node.js einbinden?

Gruß,
Jörg
 
Zuletzt bearbeitet:
Wenn der private Key Passwort geschützt ist und du das in deiner Anwendung nicht angegeben hast, wird es vermutlich daran liegen.

Mach mal eine Kopie vom private Key und entferne da das Passwort.
openssl rsa -in encrypted_private_key.key -out private_key.key
 
Danke, ja, das wars. Habe das Passwort raus genommen dann gehts.

Aber mann kann das Passwort wohl auch hinzufügen, hier der Quellcode der funktioniert:

Javascript:
const fs = require('fs');
const https = require('https');
const WebSocket = require('ws');

var cfg = {
  port: 3301,
  portssl: 3302,
  ssl_key: 'G:/inetpub/wwwroot/ewp-dev.domain.com/websocket-server/cert/ewp-dev.domain.com.key',
  ssl_cert: 'G:/inetpub/wwwroot/ewp-dev.domain.com/websocket-server/cert/S00024EJ_ewp-dev.domain.com.cer',
  keypassword: 'password'
};
 
const server = https.createServer({
  cert: fs.readFileSync(cfg.ssl_cert),
  key: fs.readFileSync(cfg.ssl_key),
  passphrase: cfg.keypassword
});
const wss = new WebSocket.Server({ server });
 
wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });
 
  ws.send('something');
});
 
server.listen(cfg.portssl, () => {
  console.log((new Date()) + ' WSS Server is listening on port ' + cfg.portssl);
});

Vielen Dank.
 
  • Gefällt mir
Reaktionen: Hayda Ministral
Zurück
Oben