• Express实现http和https服务


    一、介绍Http与Https

    概念

    • HTTP: 超文本传输协议(Hypertext transfer protocol) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
    • HTTPS: 是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

    区别

    • https协议需要到ca申请证书,一般免费证书很少,需要交费。
    • http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
    • http和https使用的是完全不同的连接方式,默认用的端口也不一样,前者是80,后者是443。
    • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

    二、 构建Https服务器

    新建工程

    $ cd /home
    $ express -e ExpressServer
    $ cd ExpressServer
    $ sudo npm install
    

    生成证书文件

    # 创建一个文件夹存放证书
    $ mkdir cert
    $ cd cert
    
    #生成私钥key文件:
    $ openssl genrsa -out privatekey.pem 1024
    
    #通过私钥生成CSR证书签名
    $ openssl req -new -key privatekey.pem -out certsign.csr
    
    # 通过私钥和证书签名生成证书文件
    $ openssl x509 -req -in certsign.csr -signkey privatekey.pem -out certificate.crt
    

    生成了三个文件:

    • privatekey.pem (私钥)
    • certsign.csr (CSR证书签名)
    • certificate.crt (证书文件)

    Express服务端代码

    var app = require('express')();
    var fs = require('fs');
    var http = require('http');
    var https = require('https');
    
    var httpServer = http.createServer(app);
    var httpsServer = https.createServer({
        key: fs.readFileSync('./cert/privatekey.pem', 'utf8'), 
        cert: fs.readFileSync('./cert/certificate.crt', 'utf8')
    }, app);
    
    var PORT = 80;
    var SSLPORT = 443;
    
    httpServer.listen(PORT, function() {
        console.log('HTTP Server is running on: http://localhost:%s', PORT);
    });
    httpsServer.listen(SSLPORT, function() {
        console.log('HTTPS Server is running on: https://localhost:%s', SSLPORT);
    });
    
    // 访问路径
    app.get('/:name', function(req, res) {
        if(req.protocol === 'https') {
            res.send('https:' + req.params.name);
        } else {
            res.send('http:' + req.params.name);
        }
    });
    

    启动服务器

    $ node app.js
    HTTP Server is running on: http://localhost:80
    https Server is running on: https://localhost:443
    

    由于我们证书是自己创建的,没有经过第三方机构的验证,因此会出现警告的提示。可以去有资质的网络运营商,去申请自己的证书。

  • 相关阅读:
    git .gitignore re-include
    excel 排名次
    ssh agent and ssh add for git Permission denied
    Git 仓库 清理 瘦身
    EF Core ThenInclude 2.0自动完成提示有误,坑了一下
    Entity Framework Core 导航属性 加载数据
    .net core mvc 模型绑定 之 json and urlencoded
    HttpClientHelper
    提示错误:“应为“providerInvariantName”参数的非空字符串。”
    关于.NET WebAPI 常见的跨域问题 解决清单
  • 原文地址:https://www.cnblogs.com/Buggo/p/5508166.html
Copyright © 2020-2023  润新知