Stability: 3 - Stable
可使用 require('tls')
来访问这个模块。javascript
tls
模块 使用 OpenSSL 来提供传输层(Transport Layer)安全性和(或)安全套接层(Secure Socket Layer):加密过的流通信。css
TLS/SSL 是一种公钥/私钥基础架构。每一个客户端和服务端都须要一个私钥。私钥能够用如下方法建立的:html
openssl genrsa -out ryans-key.pem 2048
全部服务器和某些客户端须要证书。证书由认证中心(Certificate Authority)签名,或者自签名。得到证书第一步是建立一个证书签名请求 "Certificate Signing Request" (CSR)文件。证书能够用如下方法建立的:java
openssl req -new -sha256 -key ryans-key.pem -out ryans-csr.pem
使用CSR建立一个自签名的证书:node
openssl x509 -req -in ryans-csr.pem -signkey ryans-key.pem -out ryans-cert.pem
或者你能够发送 CSR 给认证中心(Certificate Authority)来签名。npm
(TODO: 建立 CA 的文档, 感兴趣的读者能够在 Node 源码 test/fixtures/keys/Makefile
里查看)数组
建立 .pfx 或 .p12,能够这么作:缓存
openssl pkcs12 -export -in agent5-cert.pem -inkey agent5-key.pem \ -certfile ca-cert.pem -out agent5.pfx
in
: certificateinkey
: private keycertfile
: all CA certs concatenated in one file likecat ca1-cert.pem ca2-cert.pem > ca-cert.pem
Node.js 默认遵循 SSLv2 和 SSLv3 协议,不过这些协议被禁用。由于他们不太可靠,很容易受到威胁,参见 CVE-2014-3566。某些状况下,旧版本客户端/服务器(好比 IE6)可能会产生问题。若是你想启用 SSLv2 或 SSLv3 ,使用参数--enable-ssl2
或 --enable-ssl3
运行 Node。Node.js 的将来版本中不会再默认编译 SSLv2 和 SSLv3。安全
有一个办法能够强制 node 进入仅使用 SSLv3 或 SSLv2 模式,分别指定secureProtocol
为 'SSLv3_method'
或 'SSLv2_method'
。bash
Node.js 使用的默认协议方法准确名字是 AutoNegotiate_method
, 这个方法会尝试并协商客户端支持的从高到底协议。为了提供默认的安全级别,Node.js(v0.10.33 版本以后)经过将 secureOptions
设为SSL_OP_NO_SSLv3|SSL_OP_NO_SSLv2
,明确的禁用了 SSLv3 和 SSLv2(除非你给secureProtocol
传值--enable-ssl3
, 或 --enable-ssl2
, 或 SSLv3_method
)。
若是你设置了 secureOptions
,咱们不会从新这个参数。
改变这个行为的后果:
SSLv3
客户端不能协商创建链接,会被拒绝。这种状况下,你的服务器会触发 clientError
事件。错误消息会包含错误版本数字( 'wrong version number'
).clientError
事件。错误消息会包含错误版本数字( 'wrong version number'
).TLS 协议让客户端协商 TLS 会话的某些方法内容。可是,会话协商须要服务器端响应的资源,这回让它成为阻断服务攻击(denial-of-service attacks)的潜在媒介。
为了下降这种状况的发生,从新协商被限制为每10分钟3次。当超出这个界限时,在 tls.TLSSocket 实例上会触发错误。这个限制可设置:
tls.CLIENT_RENEG_LIMIT
: 从新协商 limit, 默认是 3.
tls.CLIENT_RENEG_WINDOW
: 从新协商窗口的时间,单位秒, 默认是 10 分钟.除非你明确知道本身在干什么,不然不要改变默认值。
要测试你的服务器的话,使用openssl s_client -connect address:port
链接服务器,并敲 R<CR>
(字母 R 键加回车)几回。
NPN (Next Protocol Negotiation 下次协议协商) 和 SNI (Server Name Indication 域名指示) 都是 TLS 握手扩展,运行你:
"Forward Secrecy" 或 "Perfect Forward Secrecy-彻底正向保密" 协议描述了秘钥协商(好比秘钥交换)方法的特色。实际上这意味着及时你的服务器的秘钥有危险,通信仅有可能被一类人窃听,他们必须设法获的每次会话都会生成的秘钥对。
彻底正向保密是经过每次握手时为秘钥协商随机生成密钥对来完成(和全部会话一个 key 相反)。实现这个技术(提供彻底正向保密-Perfect Forward Secrecy)的方法被称为 "ephemeral"。
一般目前有2个方法用于完成彻底正向保密(Perfect Forward Secrecy):
短暂(ephemeral)方法有性能缺点,由于生成 key 很是耗费资源。
返回支持的 SSL 密码名数组。
例子:
var ciphers = tls.getCiphers(); console.log(ciphers); // ['AES128-SHA', 'AES256-SHA', ...]
建立一个新的 tls.Server。参数 connectionListener
会自动设置为 secureConnection 事件的监听器。参数 options
对象有如下可能性:
pfx
: 包含私钥,证书和服务器的 CA 证书(PFX 或 PKCS12 格式)字符串或缓存Buffer
。(key
, cert
和 ca
互斥)。
key
: 包含服务器私钥(PEM 格式)字符串或缓存Buffer
。(能够是keys的数组)(必传)。
passphrase
: 私钥或 pfx 的密码字符串
cert
: 包含服务器证书key(PEM 格式)字符串或缓存Buffer
。(能够是certs的数组)(必传)。
ca
: 信任的证书(PEM 格式)的字符串/缓存数组。若是忽略这个参数,将会使用"root" CAs ,好比 VeriSign。用来受权链接。
crl
: 不是 PEM 编码 CRLs (证书撤销列表 Certificate Revocation List)的字符串就是字符串列表.
ciphers
: 要使用或排除的密码(cipher)字符串
为了减轻BEAST attacks ,推荐使用这个参数和以后会提到的 honorCipherOrder
参数来优化non-CBC 密码(cipher)
默认:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL
.格式上更多细节参见 OpenSSL cipher list format documentation
ECDHE-RSA-AES128-SHA256
, DHE-RSA-AES128-SHA256
和 AES128-GCM-SHA256
都是 TLS v1.2 密码(cipher),当 node.js 链接 OpenSSL 1.0.1 或更早版本(好比)时使用。注意, honorCipherOrder
设置为 enabled 后,如今任然能够和 TLS v1.2 客户端协商弱密码(cipher),
RC4
可做为客户端和老版本 TLS 协议通信的备用方法。RC4
这些年受到怀疑,任何对信任敏感的对象都会考虑其威胁性。国家级别(state-level)的参与者拥有中断它的能力。
注意: 早些版本的修订建议, AES256-SHA
做为能够接受的密码(cipher).Unfortunately, AES256-SHA
是一个 CBC 密码(cipher),容易受到 BEAST attacks 攻击。 不要 使用它。
ecdhCurve
: 包含用来 ECDH 秘钥交换弧形(curve)名字符串,或者 false 禁用 ECDH。
默认 prime256v1
. 更多细节参考 RFC 4492 。
dhparam
: DH 参数文件,用于 DHE 秘钥协商。使用 openssl dhparam
命令来建立。若是加载文件失败,会悄悄的抛弃它。
handshakeTimeout
: 若是 SSL/TLS 握手事件超过这个参数,会放弃里链接。 默认是 120 秒.
握手超时后, tls.Server
对象会触发 'clientError
' 事件。
honorCipherOrder
: 当选择一个密码(cipher) 时, 使用服务器配置,而不是客户端的。
虽然这个参数默认不可用,仍是推荐你用这个参数,和 ciphers
参数链接使用,减轻 BEAST 攻击。
注意,若是使用了 SSLv2,服务器会发送本身的配置列表给客户端,客户端会挑选密码(cipher)。默认不支持 SSLv2,除非 node.js 配置了./configure --with-sslv2
。
requestCert
: 若是设为 true
,服务器会要求链接的客户端发送证书,并尝试验证证书。默认:false
。
rejectUnauthorized
: 若是为 true
,服务器将会拒绝任何不被 CAs 列表受权的链接。仅 requestCert
参数为 true
时这个参数才有效。默认: false
。
checkServerIdentity(servername, cert)
: 提供一个重写的方法来检查证书对应的主机名。若是验证失败,返回 error。若是验证经过,返回 undefined
。
NPNProtocols
: NPN 协议的 Buffer
数组(协议需按优先级排序)。
SNICallback(servername, cb)
: 若是客户端支持 SNI TLS 扩展会调用这个函数。会传入2个参数: servername
和 cb
。 SNICallback
必须调用 cb(null, ctx)
,其中 ctx
是 SecureContext 实例。(你能够用 tls.createSecureContext(...)
来获取相应的 SecureContext 上下文)。若是 SNICallback
没有提供,将会使用高级的 API(参见下文).
sessionTimeout
: 整数,设定了服务器建立TLS 会话标示符(TLS session identifiers)和 TLS 会话票据(TLS session tickets)后的超时时间(单位:秒)。更多细节参见:SSL_CTX_set_timeout。
ticketKeys
: 一个 48 字节的 Buffer
实例,由 16 字节的前缀,16 字节的 hmac key,16 字节的 AES key 组成。可用用它来接受 tls 服务器实例上的 tls会话票据(tls session tickets)。
注意: 自动在集群模块( cluster
module)工做进程间共享。
sessionIdContext
: 会话恢复(session resumption)的标示符字符串。若是 requestCert
为 true
。默认值为命令行生成的 MD5 哈希值。不然不提供默认值。
secureProtocol
: SSL 使用的方法,例如,SSLv3_method
强制 SSL 版本为3。可能的值定义于你所安装的 OpenSSL 中的常量SSL_METHODS。
secureOptions
: 设置服务器配置。例如设置 SSL_OP_NO_SSLv3
可用禁用 SSLv3 协议。全部可用的参数见SSL_CTX_set_options响应服务器的简单例子:
var tls = require('tls'); var fs = require('fs'); var options = { key: fs.readFileSync('server-key.pem'), cert: fs.readFileSync('server-cert.pem'), // This is necessary only if using the client certificate authentication. requestCert: true, // This is necessary only if the client uses the self-signed certificate. ca: [ fs.readFileSync('client-cert.pem') ] }; var server = tls.createServer(options, function(socket) { console.log('server connected', socket.authorized ? 'authorized' : 'unauthorized'); socket.write("welcome!\n"); socket.setEncoding('utf8'); socket.pipe(socket); }); server.listen(8000, function() { console.log('server bound'); });
或
var tls = require('tls'); var fs = require('fs'); var options = { pfx: fs.readFileSync('server.pfx'), // This is necessary only if using the client certificate authentication. requestCert: true, }; var server = tls.createServer(options, function(socket) { console.log('server connected', socket.authorized ? 'authorized' : 'unauthorized'); socket.write("welcome!\n"); socket.setEncoding('utf8'); socket.pipe(socket); }); server.listen(8000, function() { console.log('server bound'); });
你能够经过 openssl s_client
链接服务器来测试:
openssl s_client -connect 127.0.0.1:8000
建立一个新的客户端链接到指定的端口和主机(port
and host
)(老版本 API),或者options.port
和 options.host
(若是忽略 host
,默认为 localhost
)。options
是一个包含如下值得对象:
host
: 客户端须要链接到的主机
port
: 客户端须要链接到的端口
socket
: 在指定的 socket (而非新建)上创建安全链接。若是这个参数有值,将忽略 host
和 port
参数。
path
: 建立 到参数path
的 unix socket 链接。若是这个参数有值,将忽略 host
和 port
参数。
pfx
: 包含私钥,证书和客户端( PFX 或 PKCS12 格式)的 CA 证书的字符串或 Buffer
缓存。
key
: 包含客户端( PEM 格式)的 私钥的字符串或 Buffer
缓存。能够是 keys 数组。
passphrase
: 私钥或 pfx 的密码字符串。
cert
: 包含客户端证书key(PEM 格式)字符串或缓存Buffer
。(能够是certs的数组)。
ca
: 信任的证书(PEM 格式)的字符串/缓存数组。若是忽略这个参数,将会使用"root" CAs ,好比 VeriSign。用来受权链接。
rejectUnauthorized
: 若是为 true
,服务器证书根据 CAs 列表受权列表验证。若是验证失败,触发 'error'
事件;err.code
包含 OpenSSL 错误代码。默认: true
。
NPNProtocols
: NPN 协议的字符串或Buffer
数组。Buffer
必须有如下格式0x05hello0x05world
,第一个字节是下一个协议名字的长度。(传的数组一般很是简单,好比: ['hello', 'world']
)。
servername
: SNI(域名指示 Server Name Indication) TLS 扩展的服务器名。
secureProtocol
: SSL 使用的方法,例如,SSLv3_method
强制 SSL 版本为3。可能的值定义于你所安装的 OpenSSL 中的常量SSL_METHODS。
session
: 一个 Buffer
实例, 包含 TLS 会话.参数 callback
添加到 'secureConnect' 事件上,其效果如同监听器。
tls.connect()
返回一个 tls.TLSSocket 对象。
这是一个简单的客户端应答服务器例子:
var tls = require('tls'); var fs = require('fs'); var options = { // These are necessary only if using the client certificate authentication key: fs.readFileSync('client-key.pem'), cert: fs.readFileSync('client-cert.pem'), // This is necessary only if the server uses the self-signed certificate ca: [ fs.readFileSync('server-cert.pem') ] }; var socket = tls.connect(8000, options, function() { console.log('client connected', socket.authorized ? 'authorized' : 'unauthorized'); process.stdin.pipe(socket); process.stdin.resume(); }); socket.setEncoding('utf8'); socket.on('data', function(data) { console.log(data); }); socket.on('end', function() { server.close(); });
或
var tls = require('tls'); var fs = require('fs'); var options = { pfx: fs.readFileSync('client.pfx') }; var socket = tls.connect(8000, options, function() { console.log('client connected', socket.authorized ? 'authorized' : 'unauthorized'); process.stdin.pipe(socket); process.stdin.resume(); }); socket.setEncoding('utf8'); socket.on('data', function(data) { console.log(data); }); socket.on('end', function() { server.close(); });
net.Socket 实例的封装,取代内部 socket 读写程序,执行透明的输入/输出数据的加密/解密。
从现有的 TCP socket 里构造一个新的 TLSSocket 对象。
socket
一个 net.Socket 的实例
options
一个包含如下属性的对象:
secureContext
: 来自 tls.createSecureContext( ... )
的可选 TLS 上下文对象。
isServer
: 若是为 true, TLS socket 将会在服务器模式(server-mode)初始化。
server
: 一个可选的 net.Server 实例
requestCert
: 可选, 参见 tls.createSecurePair
rejectUnauthorized
: 可选, 参见 tls.createSecurePair
NPNProtocols
: 可选, 参见 tls.createServer
SNICallback
: 可选, 参见 tls.createServer
session
: 可选, 一个 Buffer
实例, 包含 TLS 会话
requestOCSP
: 可选, 若是为 true
- OCSP 状态请求扩展将会被添加到客户端 hello,而且 OCSPResponse
事件将会在 socket 上创建安全通信前触发。建立一个凭证(credentials)对象,包含字典有如下的key:
pfx
: 包含 PFX 或 PKCS12 加密的私钥,证书和服务器的 CA 证书(PFX 或 PKCS12 格式)字符串或缓存Buffer
。(key
, cert
和 ca
互斥)。key
: 包含 PEM 加密过的私钥的字符串。passphrase
: 私钥或 pfx 的密码字符串。cert
: 包含 PEM 加密过的证书的字符串。ca
: 信任的 PEM 加密过的可信任的证书(PEM 格式)字符串/缓存数组。crl
:PEM 加密过的 CRLs(证书撤销列表)ciphers
: 要使用或排除的密码(cipher)字符串。更多格式上的细节参见 http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAThonorCipherOrder
: 当选择一个密码(cipher) 时, 使用服务器配置,而不是客户端的。 更多细节参见 tls
模块文档。若是没给 'ca' 细节,node.js 将会使用默认的公开信任的 CAs 列表(参见http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt)。
建立一个新的安全对(secure pair)对象,包含2个流,其中一个读/写加密过的数据,另一个读/写明文数据。一般加密端数据来自是从输入的加密数据流,另外一端被当作初始加密流。
credentials
: 来自 tls.createSecureContext( ... ) 的安全上下文对象。
isServer
: 是否以服务器/客户端模式打开这个 tls 链接。
requestCert
: 是否服务器须要链接的客户端发送证书。仅适用于服务端链接。
rejectUnauthorized
:非法证书时,是否服务器须要自动拒绝客户端。启用 requestCert
后,才适用于服务器。tls.createSecurePair()
返回一个安全对(SecurePair)对象,包含明文 cleartext
和 密文 encrypted
流 。
注意: cleartext
和 tls.TLSSocket 拥有相同的 API。
经过 tls.createSecurePair 返回。
一旦安全对(SecurePair)成功创建一个安全链接,安全对(SecurePair)将会触发这个事件。
和检查服务器 'secureConnection' 事件同样,pair.cleartext.authorized 必须检查确认是否适用的证书是受权过的。
这是 net.Server
的子类,拥有相同的方法。这个类接受适用 TLS 或 SSL 的加密链接,而不是接受原始 TCP 链接。
function (tlsSocket) {}
新的链接握手成功后回触发这个事件。参数是 tls.TLSSocket 实例。它拥有经常使用的流方法和事件。
socket.authorized
是否客户端被证书(服务器提供)受权。若是 socket.authorized
为 false,socket.authorizationError
是如何受权失败。值得一提的是,依赖于 TLS 服务器的设置,你的未受权链接可能也会被接受。socket.authorizationError
如何受权失败。值得一提的是,依赖于 TLS 服务器的设置,你的未受权链接可能也会被接受。socket.npnProtocol
包含选择的 NPN 协议的字符串.socket.servername
包含 SNI 请求的服务器名的字符串。
function (exception, tlsSocket) { }
在安全链接创建前,客户端链接触发 'error' 事件会转发到这里来。
tlsSocket
是 tls.TLSSocket,错误是从这里触发的。
function (sessionId, sessionData, callback) { }
建立 TLS 会话的时候会触发。可能用来在外部存储器里存储会话。callback
必须最后调用,不然无法从安全链接发送/接收数据。
注意: 添加这个事件监听器仅会在链接链接时有效果。
function (sessionId, callback) { }
当客户端想恢复以前的 TLS 会话时会触发。事件监听器可能会使用 sessionId
到外部存储器里查找,一旦结束会触发 callback(null, sessionData)
。若是会话不能恢复(好比不存在这个会话),可能会调用 callback(null, null)
。调用 callback(err)
将会终止链接,并销毁 socket。
注意: 添加这个事件监听器仅会在链接链接时有效果。
function (certificate, issuer, callback) { }
当客户端发送证书状态请求时会触发。你能够解析服务器当前的证书,来获取 OCSP 网址和证书 id,获取 OCSP 响应调用 callback(null, resp)
,其中 resp
是 Buffer
实例。 证书(certificate
)和发行者(issuer
) 都是初级表达式缓存(Buffer
DER-representations of the primary)和证书的发行者。它能够用来获取 OCSP 证书和 OCSP 终点网址。
能够调用callback(null, null)
,表示没有 OCSP 响应。
调用 callback(err)
可能会致使调用 socket.destroy(err)
。
典型流程:
OCSPRequest
(经过 ClientHello 里的状态信息扩展)。OCSPRequest
事件监听器。certificate
或 issuer
获取 OCSP 网址,并执行 OCSP request 到 CAOCSPResponse
, 并经过 callback
参数送回到客户端注意: 若是证书是自签名的,或者若是发行者再也不根证书列表里(你能够经过参数提供一个发行者)。 issuer
就可能为 null。
注意: 添加这个事件监听器仅会在链接链接时有效果。
注意: 你能够能想要使用 npm 模块(好比 asn1.js)来解析证书。
在指定的端口和主机上开始接收链接。若是 host
参数没传,服务接受经过 IPv4 地址(INADDR_ANY
)的直连。
这是异步函数。当服务器已经绑定后回调用最后一个参数callback
。
更多信息参见 net.Server
。
中止服务器,再也不接收新链接。这是异步函数,当服务器触发 'close'
事件后回最终关闭。
返回绑定的地址,地址家族名和服务器端口。更多信息参见 net.Server.address()
若是客户端请求 SNI 主机名和传入的 hostname
相匹配,将会用到安全上下文(secure context)。 context
能够包含key
, cert
, ca
和/或tls.createSecureContext
options
参数的其余任何属性。
设置这个属性能够在服务器的链接数达到最大值时拒绝链接。
当前服务器链接数。
稳定性: 0 - 抛弃. 使用 tls.TLSSocket 替代.
这是一个加密的流
底层 socket 写字节访问器(bytesWritten accessor)的代理,将会返回写到 socket 的所有字节数。包括 TLS 的开销。
net.Socket 实例的封装,透明的加密写数据和全部必须的 TLS 协商。
这个接口实现了一个双工流接口。它包含全部经常使用的流方法和事件。
新的链接成功握手后回触发这个事件。不管服务器证书是否受权,都会调用监听器。用于用户测试 tlsSocket.authorized
看看若是服务器证书已经被指定的 CAs 签名。若是 tlsSocket.authorized === false
,能够在 tlsSocket.authorizationError
里找到错误。若是使用了 NPN,你能够检tlsSocket.npnProtocol
获取协商协议(negotiated protocol)。
function (response) { }
若是启用 requestOCSP
参赛会触发这个事件。 response
是缓存对象,包含服务器的 OCSP 响应。
通常来讲, response
是服务器 CA 签名的对象,它包含服务器撤销证书状态的信息。
静态 boolean 变量,一直是 true
。能够用来区别 TLS socket 和 常规对象。
boolean 变量,若是 对等实体证书( peer's certificate)被指定的某个 CAs 签名,返回 true
,不然 false
。
对等实体证书( peer's certificate)没有验证经过的缘由。当 tlsSocket.authorized === false
时,这个属性才可用。
返回一个表明对等实体证书( peer's certificate)的对象。这个返回对象有一些属性和证书内容相对应。若是参数 detailed
是 true
,将会返回包含发行者issuer
完整链。若是false
,仅有顶级证书没有发行者issuer
属性。
例子:
{ subject:
{ C: 'UK', ST: 'Acknack Ltd', L: 'Rhys Jones', O: 'node.js', OU: 'Test TLS Certificate', CN: 'localhost' }, issuerInfo: { C: 'UK', ST: 'Acknack Ltd', L: 'Rhys Jones', O: 'node.js', OU: 'Test TLS Certificate', CN: 'localhost' }, issuer: { ... another certificate ... }, raw: < RAW DER buffer >, valid_from: 'Nov 11 09:52:22 2009 GMT', valid_to: 'Nov 6 09:52:22 2029 GMT', fingerprint: '2A:7A:C2:DD:E5:F9:CC:53:72:35:99:7A:02:5A:71:38:52:EC:8A:DF', serialNumber: 'B9B0D332A1AA5635' }
若是 peer 没有提供证书,返回 null
或空对象。
返回一个对象,它表明了密码名和当前链接的 SSL/TLS 协议的版本。
例子:{ name: 'AES256-SHA', version: 'TLSv1/SSLv3' }
更多信息参见http://www.openssl.org/docs/ssl/ssl.html#DEALING_WITH_CIPHERS 里的 SSL_CIPHER_get_name() 和 SSL_CIPHER_get_version() 。
初始化 TLS 从新协商进程。参数 options
可能包含如下内容: rejectUnauthorized
, requestCert
(细节参见 tls.createServer)。一旦从新协商成(renegotiation)功完成,将会执行 callback(err)
,其中 err
为 null
。
注意: 当安全链接创建后,能够用这来请求对等实体证书( peer's certificate)。
注意: 做为服务器运行时,handshakeTimeout
超时后,socket 将会被销毁。
设置最大的 TLS 碎片大小(默认最大值为:16384
,最小值为:512
)。成功的话,返回 true
,不然返回 false
。
小的碎片包会减小客户端的缓存延迟:大的碎片直到接收完毕后才能被 TLS 层彻底缓存,而且验证过完整性;大的碎片可能会有屡次往返,而且可能会由于丢包或从新排序致使延迟。而小的碎片会增长额外的 TLS 帧字节和 CPU 负载,这会减小 CPU 的吞吐量。
返回 ASN.1 编码的 TLS 会话,若是没有协商,会返回。链接到服务器时,能够用来加速握手的创建。
注意: 仅和客户端 TLS socket 打交道。仅在调试时有用,会话重用是,提供 session
参数给 tls.connect
。
返回 TLS 会话票据(ticket),或若是没有协商(negotiated),返回 undefined
。
返回绑定的地址,地址家族名和服务器端口。更多信息参见 net.Server.address()。返回三个属性, 好比:{ port: 12346, family: 'IPv4', address: '127.0.0.1' }
表示远程 IP 地址(字符串表示),例如:'74.125.127.100'
或 '2001:4860:a005::68'
.
表示远程 IP 家族, 'IPv4'
或 'IPv6'
.
远程端口(数字表示),列如, 443
.
本地 IP 地址(字符串表示)。
本地端口号(数字表示)。