Hostname / IP no coincide con el altname del certificado

Estoy tratando de crear una configuración de servidor / cliente TLS usando Node.js 0.8.8 con un certificado autofirmado.

El código del servidor esencial parece

var tlsServer = tls.createServer({
  key: fs.readFileSync('server-key.pem'),
  cert: fs.readFileSync('server-cert.pem')
}, function (connection) {
  // [...]
});
tlsServer.listen(3000);

Ahora cuando intento conectarme a este servidor, uso el siguiente código:

var connection = tls.connect({
  host: '192.168.178.31',
  port: 3000,

  rejectUnauthorized: true,
  ca: [ fs.readFileSync('server-cert.pem') ]
}, function () {
  console.log(connection.authorized);
  console.log(connection.authorizationError);
  console.log(connection.getPeerCertificate());
});

Si quito la linea

ca: [ fs.readFileSync('server-cert.pem') ]

del código del lado del cliente, Node.js lanza un error que me diceDEPTH_ZERO_SELF_SIGNED_CERT. Según tengo entendido, esto se debe al hecho de que se trata de un certificado autofirmado y no hay otra parte que confíe en este certificado.

Si me quito

rejectUnauthorized: true,

así, el error se ha ido, peroconnection.authorized es igual afalse lo que efectivamente significa que mi conexión no está encriptada. De todos modos, utilizandogetPeerCertificate() Puedo acceder al certificado enviado por el servidor. Como deseo hacer cumplir una conexión encriptada, entiendo que no puedo eliminar esta línea.

Ahora leo que puedo usar elca propiedad para especificar cualquier CA en la que quiero que Node.js confíe. losDocumentación del módulo TLS. implica que es suficiente para agregar el certificado del servidor a laca matriz, y entonces todo debería estar bien.

Si hago eso, este error desaparece, pero recibo uno nuevo:

Hostname/IP doesn't match certificate's altnames

Para mí, esto significa que la CA ahora es básicamente confiable, por lo tanto, está bien ahora, pero el certificado se realizó para otro host que no sea el que yo uso.

He creado el certificado utilizando

$ openssl genrsa -out server-key.pem 2048
$ openssl req -new -key server-key.pem -out server-csr.pem
$ openssl x509 -req -in server-csr.pem -signkey server-key.pem -out server-cert.pem

como lo indica la documentación. Al crear la CSR, me hacen las preguntas habituales, como país, estado, ... y nombre común (CN). Como se le dice "en la web" para un certificado SSL que haceno proporcione su nombre como CN, pero el nombre de host que desea utilizar.

Y aquí es probablemente donde yo fracaso.

Lo intenté

localhost192.168.178.31eisbaereisbaer.fritz.box

donde los dos últimos son el nombre local y el nombre local completo de mi máquina.

¿Alguna idea de lo que estoy haciendo mal aquí?

Respuestas a la pregunta(5)

Su respuesta a la pregunta