tls: export TLSSocket

This commit is contained in:
Fedor Indutny 2013-07-03 11:46:01 +04:00
parent 6f8ddf3759
commit 07fbb43d78
3 changed files with 43 additions and 4 deletions

View File

@ -329,6 +329,34 @@ Or
server.close(); server.close();
}); });
## Class: tls.TLSSocket
Wrapper for instance of [net.Socket][], replaces internal socket read/write
routines to perform transparent encryption/decryption of incoming/outgoing data.
## new tls.TLSSocket(socket, options)
Construct a new TLSSocket object from existing TCP socket.
`socket` is an instance of [net.Socket][]
`options` is an object that might contain following properties:
- `credentials`: An optional credentials object from
`crypto.createCredentials( ... )`
- `isServer`: If true - TLS socket will be instantiated in server-mode
- `server`: An optional [net.Server][] instance
- `requestCert`: Optional, see [tls.createSecurePair][]
- `rejectUnauthorized`: Optional, see [tls.createSecurePair][]
- `NPNProtocols`: Optional, see [tls.createServer][]
- `SNICallback`: Optional, see [tls.createServer][]
## tls.createSecurePair([credentials], [isServer], [requestCert], [rejectUnauthorized]) ## tls.createSecurePair([credentials], [isServer], [requestCert], [rejectUnauthorized])
Stability: 0 - Deprecated. Use tls.TLSSocket instead. Stability: 0 - Deprecated. Use tls.TLSSocket instead.
@ -572,7 +600,11 @@ The numeric representation of the local port.
[OpenSSL cipher list format documentation]: http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT [OpenSSL cipher list format documentation]: http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT
[BEAST attacks]: http://blog.ivanristic.com/2011/10/mitigating-the-beast-attack-on-tls.html [BEAST attacks]: http://blog.ivanristic.com/2011/10/mitigating-the-beast-attack-on-tls.html
[tls.createServer]: #tls_tls_createserver_options_secureconnectionlistener
[tls.createSecurePair]: #tls_tls_createsecurepair_credentials_isserver_requestcert_rejectunauthorized
[tls.TLSSocket]: #tls_class_tls_tlssocket [tls.TLSSocket]: #tls_class_tls_tlssocket
[net.Server]: net.html#net_class_net_server
[net.Socket]: net.html#net_class_net_socket
[net.Server.address()]: net.html#net_server_address [net.Server.address()]: net.html#net_server_address
['secureConnect']: #tls_event_secureconnect ['secureConnect']: #tls_event_secureconnect
[secureConnection]: #tls_event_secureconnection [secureConnection]: #tls_event_secureconnection

View File

@ -63,6 +63,7 @@ function onclienthello(hello) {
} }
if (hello.sessionId.length <= 0 || if (hello.sessionId.length <= 0 ||
this.server &&
!this.server.emit('resumeSession', hello.sessionId, callback)) { !this.server.emit('resumeSession', hello.sessionId, callback)) {
callback(null, null); callback(null, null);
} }
@ -70,6 +71,7 @@ function onclienthello(hello) {
function onnewsession(key, session) { function onnewsession(key, session) {
if (this.server)
this.server.emit('newSession', key, session); this.server.emit('newSession', key, session);
} }
@ -103,6 +105,7 @@ function TLSSocket(socket, options) {
this._init(); this._init();
} }
util.inherits(TLSSocket, net.Socket); util.inherits(TLSSocket, net.Socket);
exports.TLSSocket = TLSSocket;
TLSSocket.prototype._init = function() { TLSSocket.prototype._init = function() {
assert(this._handle); assert(this._handle);
@ -137,8 +140,9 @@ TLSSocket.prototype._init = function() {
this.ssl.lastHandshakeTime = 0; this.ssl.lastHandshakeTime = 0;
this.ssl.handshakes = 0; this.ssl.handshakes = 0;
if (this.server.listeners('resumeSession').length > 0 || if (this.server &&
this.server.listeners('newSession').length > 0) { (this.server.listeners('resumeSession').length > 0 ||
this.server.listeners('newSession').length > 0)) {
this.ssl.enableSessionCallbacks(); this.ssl.enableSessionCallbacks();
} }
} else { } else {
@ -164,7 +168,9 @@ TLSSocket.prototype._init = function() {
if (process.features.tls_sni && if (process.features.tls_sni &&
options.isServer && options.isServer &&
options.SNICallback && options.server._contexts.length) { options.server &&
options.SNICallback &&
options.server._contexts.length) {
this.ssl.onsniselect = options.SNICallback; this.ssl.onsniselect = options.SNICallback;
} }

View File

@ -207,6 +207,7 @@ exports.parseCertString = function parseCertString(s) {
}; };
// Public API // Public API
exports.TLSSocket = require('_tls_wrap').TLSSocket;
exports.Server = require('_tls_wrap').Server; exports.Server = require('_tls_wrap').Server;
exports.createServer = require('_tls_wrap').createServer; exports.createServer = require('_tls_wrap').createServer;
exports.connect = require('_tls_wrap').connect; exports.connect = require('_tls_wrap').connect;