2015-06-29 39 views
2

我正在做nodejs的試驗。我正嘗試使用TLS票證來恢復TLS會話。所以我會在連接成功後讓客戶端保存掉TLS Ticket。關閉後,我希望它使用相同的TLS票據重新建立TLS連接。節點TLS票據重建連接

我找到了節點tls命令tlsSocket.getTLSTicket()但是我不確定如何使用它重建連接,因爲它「僅用於調試」。

我想要的是從客戶端獲取TLSTicket並根據nodejs中的服務器中的TLSTicketKey手動驗證它的能力。

感謝

回答

1

支出超過我應該有辦法更多的​​時間後,這些是什麼,我發現:

  1. 似乎有不被任何API或暴露的JavaScript函數,它會讓你驗證TLSTickets。

重用通過會話票據會議工作外的箱子,實現是完全透明的爲您的node.js

https://strongloop.com/strongblog/improve-the-performance-of-the-node-js-https-server/

然而,正如你會在看到鏈接,可以手動處理與會話存儲的會話(這明顯違背了TLS票證的用途)。

  1. 節點使用OpenSSL提供的以下函數來執行票證處理。

    SSL_CTX_set_tlsext_ticket_key_cb - 設置會話票據處理的回調

的詳細介紹:https://github.com/joyent/node/blob/d13d7f74d794340ac5e126cfb4ce507fe0f803d5/deps/openssl/openssl/doc/ssl/SSL_CTX_set_tlsext_ticket_key_cb.pod

從這兒做:https://github.com/joyent/node/blob/master/src/node_crypto.cc

  • 當它收到有效的TLS票證時,節點不會發出resumeSession。 以下GitHub問題描述了爲什麼,並且是對Node的TLS票據實現細節的簡單引用。
  • https://github.com/joyent/node/issues/5872

    +0

    謝謝你,在我接受,我會通過自己https://github.com/joyent/node/blob/master/src/node_crypto.cc看。我仍然希望它可能通過一些js黑客手段暴露出來。 – GTDev

    +0

    'getTicketKeys'和'setTicketKeys'可能是你正在尋找的功能。但是,我似乎無法找到他們被稱爲的地方。從openssl文檔中設置密鑰,當會話票證擴展出現在TLS hello消息中時,將爲每個客戶端調用TLS會話的回調函數cb。這個函數的職責是創建或檢索密碼參數並保持它們的狀態。「但是,我無法找到它是如何或在哪裏完成的。 –

    +0

    讓我知道你發現了什麼,以及你如何最終實現這一點。也許,如果你能與Fedor Indutny聯繫,你會得到最詳細的解釋。 –