Stability: 3 - Stable
可以使用 require('tls')
來訪問這個模塊。
tls
模塊 使用 OpenSSL 來提供傳輸層(Transport Layer)安全性和(或)安全套接層(Secure Socket Layer):加密過的流通訊。
TLS/SSL 是一種公鑰/私鑰基礎架構。每個客戶端和服務端都需要一個私鑰。私鑰可以用以下方法創建的:
openssl genrsa -out ryans-key.pem 2048
所有服務器和某些客戶端需要證書。證書由認證中心(Certificate Authority)簽名,或者自簽名。獲得證書第一步是創建一個證書簽名請求 "Certificate Signing Request" (CSR)文件。證書可以用以下方法創建的:
openssl req -new -sha256 -key ryans-key.pem -out ryans-csr.pem
使用CSR創建一個自簽名的證書:
openssl x509 -req -in ryans-csr.pem -signkey ryans-key.pem -out ryans-cert.pem
或者你可以發送 CSR 給認證中心(Certificate Authority)來簽名。
(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'
。
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.htmlhonorCipherOrder
: 當選擇一個密碼(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 地址(字符串表示)。
本地端口號(數字表示)。