繼Node.js收錄crypto之後,還沒有機會實作相關功能
透過SSH key來做client與server間的認證會是各不錯的sample...
下面展示將ssh key的privare key跟public key做sign與verify的流程
屆時將private key放在client端,public key可以load在server端(目前MiCloud上管理ssh key的方式)
中間透過時間字串做key的hash減少傳輸中間key背破解的風險...
//STEP1: 載入crypto, http-signature兩各主要使用模組
var crypto=require("crypto");var sys=require("sys");var fs=require("fs");var hs = require('http-signature');
//STEP2: 此處預計採用utf-8讀ssh key,另外,key是採用SHA256的加密方式
//產生key的指令:ssh-keygen -t rsa
//STEP3: 使用base64 sign ssh private key
//STEP4: 透過http-signature來將public key轉換成pem格式
//讀取public key與private keyvar ENCODE= 'UTF-8';var alg = "RSA-SHA256";var n = new Date().toUTCString();
//public keyvar pubKey = fs.readFileSync("/root/.ssh/id_rsa.pub", ENCODE);//private keyvar privKey = fs.readFileSync("/root/.ssh/id_rsa", ENCODE);
//STEP3: 使用base64 sign ssh private key
//以下部分可以用在server sidevar signer = crypto.createSign(alg);signer.update(n);var secrit = signer.sign(privKey, 'base64');console.log('SSH key singed...............................................');console.log(secrit);
//STEP4: 透過http-signature來將public key轉換成pem格式
//STEP5: 轉換過的pem檔案,就可以透過crypto進行verifyconsole.log('Compute SSH key to PEM.......................................');var pem = hs.sshKeyToPEM(pubKey);console.log(pem);
console.log('Start to verify..............................................');var ver = crypto.createVerify(alg);ver.update(n);var v = ver.verify(pem, secrit, 'base64');console.log(v); //這邊會顯示verify的結果
以上,可以供有需要的人做參考~