當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Node.js tls.createServer([options][, secureConnectionListener])用法及代碼示例


tls.createServer([options][, secureConnectionListener])

曆史
版本變化
v12.3.0

options 參數現在支持 net.createServer() 選項。

v9.3.0

options 參數現在可以包括 clientCertEngine

v8.0.0

ALPNProtocols 選項現在可以是 TypedArrayDataView

v5.0.0

現在支持 ALPN 選項。

v0.3.2

添加於:v0.3.2


參數
  • options <Object>
    • ALPNProtocols : <string[]> | <Buffer[]> | <TypedArray[]> | <DataView[]> | <Buffer> | <TypedArray> | <DataView> 包含支持的 ALPN 協議的字符串數組,BufferTypedArrayDataView 或單個 BufferTypedArrayDataViewBuffer s 應該具有格式 [len][name][len][name]... 例如0x05hello0x05world ,其中第一個字節是下一個協議名稱的長度。傳遞數組通常要簡單得多,例如['hello', 'world'] 。 (協議應按其優先級排序。)

    • clientCertEngine <string> 可以提供客戶端證書的OpenSSL 引擎的名稱。

    • enableTrace <boolean> 如果 true ,將在新連接上調用 tls.TLSSocket.enableTrace() 。建立安全連接後可以啟用跟蹤,但必須使用此選項來跟蹤安全連接設置。 默認: false

    • handshakeTimeout <number> 如果 SSL/TLS 握手未在指定的毫秒數內完成,則中止連接。每當握手超時時,都會在 tls.Server 對象上發出 'tlsClientError'默認: 120000(120 秒)。

    • rejectUnauthorized <boolean> 如果不是 false,服務器將拒絕任何未經提供的 CA 列表授權的連接。此選項僅在 requestCerttrue 時有效。 默認: true

    • requestCert <boolean> 如果 true 服務器將從連接的客戶端請求證書並嘗試驗證該證書。 默認: false

    • sessionTimeout <number> 服務器創建的 TLS 會話將不再可恢複的秒數。有關詳細信息,請參閱Session Resumption默認: 300

    • SNICallback(servername, callback) <Function> 如果客戶端支持 SNI TLS 擴展,將調用該函數。調用時將傳遞兩個參數:servernamecallbackcallback 是一個 error-first 回調,它接受兩個可選參數:errorctxctx (如果提供)是 SecureContext 實例。 tls.createSecureContext() 可用於獲得正確的 SecureContext 。如果使用虛假的 ctx 參數調用 callback,則將使用服務器的默認安全上下文。如果未提供SNICallback,則將使用具有高級 API 的默認回調(見下文)。

    • ticketKeys : <Buffer> 48 字節的加密強偽隨機數據。有關詳細信息,請參閱Session Resumption

    • pskCallback <Function>

      在協商TLS-PSK(預共享 key )時,使用客戶端提供的身份調用該函數。如果返回值為null,則協商過程將停止,並向對方發送"unknown_psk_identity"警報消息。如果服務器希望隱藏 PSK 身份未知的事實,則回調必須提供一些隨機數據作為 psk 以使連接在協商完成之前以 "decrypt_error" 失敗。默認情況下禁用 PSK 密碼,因此使用 TLS-PSK 需要使用 ciphers 選項顯式指定密碼套件。更多信息可以在RFC 4279 中找到。

    • pskIdentityHint <string> 可選提示發送給客戶端以幫助在 TLS-PSK 協商期間選擇身份。在 TLS 1.3 中將被忽略。在未能設置 pskIdentityHint 時,'tlsClientError' 將與 'ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED' 代碼一起發出。

    • ...:可以提供任何 tls.createSecureContext() 選項。對於服務器,通常需要標識選項(pfxkey /certpskCallback)。

    • ...:可以提供任何 net.createServer() 選項。

  • secureConnectionListener <Function>
  • 返回: <tls.Server>

創建一個新的 tls.Server secureConnectionListener(如果提供)會自動設置為 'secureConnection' 事件的偵聽器。

ticketKeys 選項在node:cluster 模塊工作人員之間自動共享。

下麵演示了一個簡單的回顯服務器:

const tls = require('node:tls');
const fs = require('node:fs');

const options = {
  key: fs.readFileSync('server-key.pem'),
  cert: fs.readFileSync('server-cert.pem'),

  // This is necessary only if using client certificate authentication.
  requestCert: true,

  // This is necessary only if the client uses a self-signed certificate.
  ca: [ fs.readFileSync('client-cert.pem') ]
};

const server = tls.createServer(options, (socket) => {
  console.log('server connected',
              socket.authorized ? 'authorized' : 'unauthorized');
  socket.write('welcome!\n');
  socket.setEncoding('utf8');
  socket.pipe(socket);
});
server.listen(8000, () => {
  console.log('server bound');
});

可以通過使用來自 tls.connect() 的示例客戶端連接到服務器來測試服務器。

相關用法


注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 tls.createServer([options][, secureConnectionListener])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。