Https在各种Web服务器下配置

栏目: 后端 · 发布时间: 6年前

内容简介:前端很多情况需要用启动web服务器,而为了保证数据的安全性,都需要用1.建立一个信息安全通道,来保证数据传输的安全;

前言

前端很多情况需要用启动web服务器,而为了保证数据的安全性,都需要用 Https 对传输的数据进行加密传输,而且有些 web-view 只允许 https 通过访问,所以学习怎么配置 https 也成为大前端不可以少的功课之一。下面本妹子将先简单介绍下 Https ,再依次介绍怎么在 Nodewebpack-dev-servernginx 这三个最常见的前端web服务器下配置 Https ,以及关于证书的扩展干货。

Https简介

Https 协议的主要作用可以分为两点:

1.建立一个信息安全通道,来保证数据传输的安全;

2.确认网站的真实性;

https 的加密方式主要是非对称加密,所以会有一对密钥,分别是一个公钥(证书)和私钥。

Https在各种Web服务器下配置

浏览器allen访问的时候,客户端会接受这个证书,并利用这个证书里的公钥对数据加密,加密后,服务端tony用自己的私钥解密就行了。

Web服务一般使用 OpenSSL 工具提供的密码库,生成PEM、KEY、CRT等格式的证书文件。

其中 .crt 后缀一般存放证书, .key 后缀一般存放私钥, .pem 后缀的可以同时存放把CA证书和密钥。

生成证书和密钥

可以直接用命令生成

#使用以下命令生成一个证书密钥对 key.pem 和 cert.pem,它将有效期约10年(准确地说是3650天)
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.key -out cert.crt
#或者直接生成到一个pem文件中
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout all.pem -out all.pem

可以用 selfsigned 插件生成

const selfsigned = require('selfsigned');
var selfsigned = require('selfsigned');
var attrs = [{ name: 'commonName', value: 'contoso.com' }];
//有效期约10年
var pems = selfsigned.generate(attrs, { days: 3650 });
fs.writeFileSync('all.pem', pems.private + pems.cert, { encoding: 'utf-8' });

node配置https

用openssl生成all.pem

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout all.pem -out all.pem

在同目录编写 app.js ,并运行 node app.js ,启动 node 服务监听 88 端口

var https = require('https');
const fs = require('fs');
const path = require('path');

const options = {
  key: fs.readFileSync(path.resolve(__dirname, './all.pem')),//密钥
  cert: fs.readFileSync(path.resolve(__dirname, './all.pem'))//证书
};
https.createServer(options, (request, response)=> {
    // 发送 HTTP 头部 
    // HTTP 状态值: 200 : OK
    // 内容类型: text/plain
    response.writeHead(200, {'Content-Type': 'text/plain'});
    // 发送响应数据 "Hello World"
    response.end('Hello World\n');
}).listen(88);

// 终端打印如下信息
console.log('Server running at https://127.0.0.1:88/');

Https在各种Web服务器下配置

具体代码可查看 https://github.com/raoenhui/node-https.git

web-dev-server 配置https

web-dev-server配置很简单,只要将 https 选项设成 true 即可。

module.exports = {
  devServer: {
    https: true
  }
};

web-dev-server原理

server.js里面判断如果没有证书和密钥,则用 selfsigned 生成,并放在ssl目录中的 server.pem 文件下,默认生成有效期为 30 天。

const certPath = path.join(__dirname, '../ssl/server.pem');
      let certExists = fs.existsSync(certPath);
      ...
      if (!certExists) {
        log('Generating SSL Certificate');
        const attrs = [{ name: 'commonName', value: 'localhost' }];
        const pems = selfsigned.generate(attrs, {
          algorithm: 'sha256',
          days: 30,
          keySize: 2048,
          extensions: [...]
        });

        fs.writeFileSync(certPath, pems.private + pems.cert, { encoding: 'utf-8' });
      }
      fakeCert = fs.readFileSync(certPath);

启动服务的时候引用证书和密钥

options.https.key = options.https.key || fakeCert;
    options.https.cert = options.https.cert || fakeCert;
    ...
    this.listeningApp = spdy.createServer(options.https, app);

Nginx 配置https

# 进入nginx目录
cd nginx
# 在key文件夹中用openssl生成
mkdir key && cd key && openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout all.pem -out all.pem
# HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  localhost;
        #证书路径
        ssl_certificate      key/all.pem;
        ssl_certificate_key  key/all.pem;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   /HD/mycode/test;
            index  index.html index.htm;
        }
    }

知识扩展

其他证书格式

上面本妹子所讲的是对于前端比较常见的web服务器,而其实还有很多种服务器它们的证书格式是不一样的,而且可以互相转换,具体如下图所示

Https在各种Web服务器下配置

CA

CA全称为Certificate Authority 证书授权中心。上面本妹子是自己生成证书,这个证书在互联网上是认为不安全的。只有通过CA机构下发的证书,浏览器和电脑才会认为是可靠安全的。

其中证书也有很多分类,可以向CA申请不同类型的证书。下面举例几种常见证书类型的区别

Https在各种Web服务器下配置

还可以用SSL证书在线检测工具,检测网站证书详细信息。

https://www.chinassl.net/ssltools/ssl-checker.html

如www.jd.com

Https在各种Web服务器下配置

Https在各种Web服务器下配置


以上所述就是小编给大家介绍的《Https在各种Web服务器下配置》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机科学概论(第7版) (平装)

计算机科学概论(第7版) (平装)

J.Glenn Brookshear / 王保江 / 人民邮电出版社 / 2003-9 / 49.0

《计算机科学概论(第2版)》更新了部分内容,使其更加贴近于计算机科学领域内的最新趋势,这包括了网络安全、开源运动、关联存储、公钥加密、XML、Java和C#等内容。扩充了网络和Internet所覆盖的内容。一个程序用C#语言编写,还有C、C++和Java,作为语言的例子。不过整个方法依旧保持语言的独立。一起来看看 《计算机科学概论(第7版) (平装)》 这本书的介绍吧!

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具