国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解NodeJS Https HSM雙向認(rèn)證實現(xiàn)

2024-05-06 15:41:44
字體:
供稿:網(wǎng)友

工作中需要建立一套HSM的HTTPS雙向認(rèn)證通道,即通過硬件加密機(Ukey)進行本地加密運算的HTTPS雙向認(rèn)證,和銀行的UKEY認(rèn)證類似。

NodeJS可以利用openSSL的HSM plugin方式實現(xiàn),但是需要編譯C++,太麻煩,作者采用了利用Node Socket接口,純JS自行實現(xiàn)Https/Http協(xié)議的方式實現(xiàn)

具體實現(xiàn)可以參考如下 node-https-hsm

TLS規(guī)范自然是參考RFC文檔 The Transport Layer Security (TLS) Protocol Version 1.2

概述

本次TLS雙向認(rèn)證支持以下加密套件(*為建議使用套件):

TLS_RSA_WITH_AES_128_CBC_SHA256(TLS v1.2) * TLS_RSA_WITH_AES_256_CBC_SHA256(TLS v1.2) * TLS_RSA_WITH_AES_128_CBC_SHA(TLS v1.1) TLS_RSA_WITH_AES_256_CBC_SHA(TLS v1.1)

四種加密套件流程完全一致,只是部分算法細(xì)節(jié)與報文略有差異,體現(xiàn)在

AES_128/AES_256的會話AES密鑰長度分別為16/32字節(jié)。 TLS 1.1 在計算finish報文數(shù)據(jù)時,進行的是MD5 + SHA1的HASH算法,而在TLS v1.2下,HASH算法變成了單次SHA256。 TLS 1.1 處理finish報文時的偽隨機算法(PRF)需要將種子數(shù)據(jù)為分兩塊,分別用 MD5 / SHA1 取HASH后異或,TLS 1.2 為單次 SHA256。 TLS 1.2 的 CertificateVerify / ServerKeyExchange 報文末尾新增2個字節(jié)的 Signature Hash Algorithm,表示 hash_alg 和 sign_alg。

目前業(yè)界推薦使用TLS v1.2, TLS v1.1不建議使用。

流程圖

以下為 TLS 完整握手流程圖

* =======================FULL HANDSHAKE====================== * Client                        Server * * ClientHello         --------> *                         ServerHello *                         Certificate *                     CertificateRequest *               <--------   ServerHelloDone * Certificate * ClientKeyExchange * CertificateVerify * Finished           --------> *                     change_cipher_spec *               <--------       Finished * Application Data       <------->   Application Data

流程詳解

客戶端發(fā)起握手請求

TLS握手始于客戶端發(fā)起 ClientHello 請求。

struct {  uint32 gmt_unix_time; // UNIX 32-bit format, UTC時間  opaque random_bytes[28]; // 28位長度隨機數(shù)} Random; //隨機數(shù)struct {  ProtocolVersion client_version; // 支持的最高版本的TLS版本  Random random; // 上述隨機數(shù)  SessionID session_id; // 會話ID,新會話為空  CipherSuite cipher_suites<2..2^16-2>; // 客戶端支持的所有加密套件,上述四種  CompressionMethod compression_methods<1..2^8-1>; // 壓縮算法  select (extensions_present) { // 額外插件,為空    case false:      struct {};    case true:      Extension extensions<0..2^16-1>;  };} ClientHello; // 客戶端發(fā)送支持的TLS版本、客戶端隨機數(shù)、支持的加密套件等信息

服務(wù)器端回應(yīng)客戶端握手請求

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 昌黎县| 浮梁县| 泌阳县| 县级市| 开鲁县| 綦江县| 扶绥县| 延安市| 澜沧| 高密市| 通许县| 岳西县| 都兰县| 邛崃市| 乌鲁木齐县| 凤台县| 左贡县| 兰西县| 隆回县| 山丹县| 宣化县| 亳州市| 嵊州市| 平度市| 高雄市| 察雅县| 安乡县| 临猗县| 镇原县| 公安县| 正阳县| 紫阳县| 阿巴嘎旗| 边坝县| 普洱| 双城市| 凌海市| 青州市| 溧水县| 乾安县| 云和县|