Node.js v0.6.19 Manual & Documentación
Tabla de Contenidos
TLS (SSL)#
Usa require('tls')
para acceder a este módulo.
El módulo tls
utiliza OpenSSL para proveer seguridad en la Transport Layer Security y/o Secure Socket Layer: encriptacion de flujo de comunicaciones.
TLS/SSL es una infraestructura de clave publica/privada. Cada cliente y cada servidor deben tener una clave privada. Una clave privada se crea como sigue:
openssl genrsa -out ryans-key.pem 1024
Todos los servidores y algunos clientes necesitan tener un certificado. Los certificados son claves públicas firmadas por una autoridad certificadora (CA) o por ellas mismas. El primer paso para obtener un certificado es crear un fichero de "Petición de firma de Certificado" (CSR). Esto se hace como sigue:
openssl req -new -key ryans-key.pem -out ryans-csr.pem
Para crear un certificado auto firmado con el CSR, hay que hacer:
openssl x509 -req -in ryans-csr.pem -signkey ryans-key.pem -out ryans-cert.pem
De forma alternativa puedes enviar el CSR a la autoridad certificadora para firmarlo.
(TODO: documentos sobre la creación de una CA, por ahora los usuarios interesados deberían echar un vistazo a test/fixtures/keys/Makefile
en el código fuente de Node)
s = tls.connect(port, [host], [options], callback)#
Crea una nueva conexión cliente al port
y al host
dados. (host
por defecto es localhost
.) options
debe ser un objeto que especifique:
key
: Un string oBuffer
que contiene la llave privada del servidor en formato PEM. (Requerido)cert
: Un string oBuffer
que contiene la clave del certificado del servidor en formato PEM.ca
: Un array de strings oBuffer
s de certificados de confianza. Si esto es omitido, varias CAs "root" bien conocidas serán usadas, como VeriSign. Estas son usadas para autorizar conexiones.
tls.connect()
devuelve un objeto CryptoStream
en texto plano.
Después del TSL/SSL handshake el callback
es invocado. El callback
será invocado independientemente si el certificado del servidor fue autorizado o no. Es responsabilidad del usuario probar s.authorized
para ver si el certificado del servidor estaba firmado por una de las CAs especificadas. Si s.authorized === false
entonces el error puede encontrarse en s.authorizationError
.
STARTTLS#
In the v0.4 branch no function exists for starting a TLS session on an
already existing TCP connection. This is possible it just requires a bit of
work. The technique is to use tls.createSecurePair()
which returns two
streams: an encrypted stream and a plaintext stream. The encrypted stream is then
piped to the socket, the plaintext stream is what the user interacts with thereafter.
Here is some code that does it.
tls.Server#
Esta clase es una subclase de net.Server
y tiene los mismos métodos.
En lugar de aceptar solo conexiones TCP en bruto, acepta conexiones encriptadas usando TLS o SSL.
Aquí hay un ejemplo simple de un servidor eco:
var tls = require('tls');
var fs = require('fs');
var options = {
key: fs.readFileSync('server-key.pem'),
cert: fs.readFileSync('server-cert.pem')
};
tls.createServer(options, function (s) {
s.write("welcome!\n");
s.pipe(s);
}).listen(8000);
Puedes probar este servidor conectándose a él con openssl s_client
:
openssl s_client -connect 127.0.0.1:8000
tls.createServer(options, secureConnectionListener)#
Este es un constructor para la clase tls.Server
. El objeto options puede contener:
key
: Un string oBuffer
que contiene la clave privada del servidor en formato PEM. (Requerido)cert
: Un string oBuffer
que contiene el certificado del servidor en formato PEM. (Requerido)ca
: Un array de strings oBuffer
s de certificados de confianza. Si esto es omitido, varias CAs "root" bien conocidas serán usadas, como VeriSign. Estas son usadas para autorizar conexiones.requestCert
: Si estrue
el servidor solicitará un certificado de todos los clientes que se conecten e intenten verificar ese certificado. Por defecto:false
rejectUnauthorized
: Si estrue
el servidor rechazará cualquier conexión no autorizada por la lista de CAs suministradas. Esta opción solo tiene efecto sirequestCert
estrue
. Por defecto:false
.
Event: 'secureConnection'#
function (cleartextStream) {}
Este evento es emitido después de que una nueva conexión haya realizado con éxito el handshake. El argumento es una instancia de stream.Stream
. Tiene todos los métodos y eventos de stream.
cleartextStream.authorized
es un valor boolean que indica si el cliente está verificado por una de las CA suministradas por el servidor. Si cleartextStream.authorized
es false, entonces cleartextStream.authorizationError
describe como falló la autorización. Relacionado pero merece mencionarse: dependiendo de la configuración del servidor TLS, tus autorizaciones de conexión pueden ser aceptadas.
server.listen(port, [host], [callback])#
Empieza aceptando conexiones en el port
y el host
especificados. Si el host
es omitido, el servidor aceptará conexiones dirigidas a cualquier dirección IPv4 (INADDR_ANY
).
Esta función es asíncrona. El último parámetro callback
se invocará cuando el servidor esté saturado.
Mirar net.Server
para más información.
server.close()#
Detiene el servidor, dejando de aceptar conexiones. Esta función es asíncrona, el servidor finalmente se cierra cuando emite un evento 'close'
.
server.maxConnections#
Establece esta propiedad para rechazar conexiones cuando el número de conexiones del servidor sea alta.
server.connections#
Número de conexiones concurrentes en el servidor.