前言很多时候,前端需要启动web服务器,为了保证数据的安全,需要使用Https对传输的数据进行加密,以及有些web-view只允许https通过Access,所以学习如何配置https就成了大前端必不可少的功课之一。下面,本妹子就简单介绍下Https,然后依次介绍下最常见的三种前端web服务器Node、webpack-dev-server和nginx下如何配置Https,以及关于证书的扩展干货。Https简介Https协议的主要功能可以分为两点:1.建立信息安全通道,保证数据传输的安全;2、确认网站的真实性;而https的加密方式主要是非对称加密,所以会有一对密钥分别是公钥(证书)和私钥。当浏览器allen访问时,客户端会接受证书,并使用证书中的公钥对数据进行加密。加密后,服务器Tony可以用自己的私钥解密。Web服务一般使用OpenSSL工具提供的密码库生成PEM、KEY、CRT等格式的证书文件。其中.crt后缀一般存放证书,.key后缀一般存放私钥,.pem后缀可以同时存放CA证书和密钥。生成证书和密钥可以直接用命令生成#使用下面的命令生成证书密钥对key.pem和cert.pem,有效期大约10年(准确的说是3650天)opensslreq-newkeyrsa:2048-new-nodes-x509-days3650-keyoutkey.key-outcert.crt#或者直接生成pem文件opensslreq-newkeyrsa:2048-new-nodes-x509-days3650-keyoutall.pem-outall.pem可以由自签名插件生成];//有效期10年左右varpems=selfsigned.generate(attrs,{days:3650});fs.writeFileSync('all.pem',pems.private+pems.cert,{encoding:'utf-8'});node配置https,使用openssl生成all.pemopensslreq-newkeyrsa:2048-new-nodes-x509-days3650-keyoutall.pem-outall.pem同目录下写app.js,运行nodeapp.js启动节点服务监听88端口varhttps=require('https');constfs=require('fs');constpath=require('路径');constoptions={key:fs.readFileSync(path.resolve(__dirname,'./all.pem')),//keycert:fs.readFileSync(path.resolve(__dirname,'./all.pem'))//证书};https.createServer(options,(request,response)=>{//发送HTTPheader//HTTPstatusvalue:200:OK//Contenttype:text/plainresponse.writeHead(200,{'Content-Type':'text/plain'});//发送响应数据"HelloWorld"response.end('HelloWorld\n');}).listen(88);//终端打印如下信息console.log('Serverrunningathttps://127.0.0.1:88/');具体代码可以查看https://github.com/raoenhui/node-https.gitweb-dev-server配置httpsweb-dev-server配置很简单,只需要设置https选项为module.exports={devServer:{https:真}};web-dev-server原理server.js判断如果没有证书和key,会通过selfsigned生成,放在server的ssl目录下。pem文件,默认生成有效期为30天。constcertPath=path.join(__dirname,'../ssl/server.pem');让certExists=fs.existsSync(certPath);...if(!certExists){log('生成SSL证书');constattrs=[{name:'commonName',value:'localhost'}];constpems=selfsigned.generate(attrs,{algorithm:'sha256',days:30,keySize:2048,extensions:[...]});fs.writeFileSync(certPath,pems.private+pems.cert,{encoding:'utf-8'});}fakeCert=fs.readFileSync(certPath);启动服务时参考证书和密钥选项.https。key=options.https.key||假证书;options.https.cert=options.https.cert||假证书;...this.listeningApp=spdy.createServer(options.https,app);Nginx配置https#进入nginx目录cdnginx#key文件夹下用openssl生成mkdirkey&&cdkey&&opensslreq-newkeyrsa:2048-new-nodes-x509-days3650-keyoutall.pem-outall.pem#HTTPS服务器#服务器{列表en443SSL;服务器名称本地主机;#证书路径ssl_certificatekey/all.pem;ssl_certificate_key密钥/all.pem;ssl_session_cache共享:SSL:1m;ssl_session_timeout5m;ssl_ciphersHIGH:!aNULL:!MD5;ssl_prefer_server_ciphers开启;root//HD/mycode/test;indexindex.htmlindex.htm;}}知识扩展其他证书格式上面说的是前端比较常见的web服务器,其实有很多种服务器,证书格式不一样,可以互相转换。如下图所示,CACA的全称是CertificateAuthority。上面的妹子自己生成了一张证书。此证书在Internet上被认为是不安全的。只有通过CA组织颁发的证书,浏览器和计算机才会被认为是可靠和安全的。其中,证书的种类很多,您可以向CA申请不同种类的证书。下面举例说明几种常见证书类型的区别。也可以使用SSL证书在线检测工具检测网站证书的详细信息。https://www.chinassl.net/ssltools/ssl-checker.html如www.jd.com相关链接原文地址:https://raoenhui.github.io/nodejs/2019/06/04/https/Https网络安全架构设计与实践视频教程自签名文档数字证书快乐编码..:)
