nodejs的某些api~(六)HTTPS


node的HTTPS模塊接口與HTTP其實差不多,就是多了一個認證證書,私鑰的配置等等,API都相似的。

在客戶端服務器通信的方法中,只有HTTPS是最安全的,它的原理是客戶端和服務器發送自己的公鑰,分別加密,然后解密傳輸的數據對比,為了防止重放攻擊,還會添加隨機數或者客戶端IP等信息,IP造假太容易了,大部分都是隨機數加時間什么什么的。HTTPS就是在HTTP與TCP之間添加了一個加密ssl/tls層。

類https.Server();//該類是tls.Server的子類,並發生和http.Server已有的事件。
server.setTimeout(msecs,cb)
server.timeout()
https.createServer(options,[requestListener]);//返回一個新的HTTPS Web服務器對象。其中options類似於tls.createServer();
//requestListener是一個會被自動添加到request事件的函數。

https.createServer(options,function(req,res){
    res.writeHead(200);
    res.end('hello')
}).listen(9000);

server.listen(port,[host],[backlog],[cb])
server.listen(path,[cb]);
server.listen(handle,[cb]);//見http.listen
server.close([cb]);
https.request(options,cb);//向一個安全web服務器發送請求,options可以是一個對象或字符串。如果options是字符串,會url.parse()解析;
//所有來自hhtp.request()的選項都是經過驗證的;
https.get(options,cb)
https.Agent
https.globalAgent//所有HTTPS客戶端請求的全局https.Agent實例;

var https = require('https'); 
var fs = require('fs');  
var options = {   
          key: fs.readFileSync('./keys/server.key'), 
          cert: fs.readFileSync('./keys/server.crt')
 };  
https.createServer(options, function (req, res) {                                  
       res.writeHead(200);   
       res.end("hello world\n");
 }).listen(8000); 

和http主要差別就在key和cert上。

HTTPS的客戶端

var https = require('https');
var fs = require('fs');  
var options = {  
        hostname: 'localhost',
        port: 8000, 
        path: '/', 
        method: 'GET', 
        key: fs.readFileSync('./keys/client.key'), 
        cert: fs.readFileSync('./keys/client.crt'),
        ca: [fs.readFileSync('./keys/ca.crt')]
 };  
options.agent = new https.Agent(options);  
var req = https.request(options, function(res) {  
         res.setEncoding('utf-8');
         res.on('data', function(d) {
                  console.log(d); 
         });
 });
req.end();  
req.on('error', function(e) {   
       console.log(e);
 }); 

這里是創建私鑰,證書的代碼,因為node的tls/ssl都是基於openssl的,所以直接用openssl生成。

// 創建私 
$ openssl genrsa -out client.key 1024 
// 生成CSR 
$ openssl req -new -key client.key -out client.csr 
// 生成名證
$ openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt 

跟tls模塊生成是一樣的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM