当前位置: 首页 > 后端技术 > Node.js

Express开启https服务器

时间:2023-04-03 11:56:14 Node.js

1、HTTPS服务器请求处理客户端发起请求,服务器收到请求后向客户端发送证书。证书包含服务器的公钥。客户端收到证书后,生成一个对称密钥,并取出服务器公钥加密这个对称密钥,服务器收到后用私钥解密,得到客户端发送的对称密钥,以及然后客户端和服务器将使用这个对称密钥加密和解密数据。所以在创建https服务器时,必须提供服务器的私钥和证书。2、生成服务器的私钥和证书证书的生成需要经过CA(CertificateAuthority,数字证书认证中心)的签名,所以我们首先要有一个CA机构。CA组织颁发证书时,主要需要用到CA的私钥。密钥和CA的根证书。我们可以通过linux自带的openssl命令来生成,比如:①生成CA的私钥#生成CA组织的私钥opensslgenrsa-outca.private.key1024;备注:genrsa:表示生成RSA私钥,不需要生成公钥,因为公钥是从私钥中提取出来的,如果知道私钥就可以通过命令提取公钥。需要注意的是,客户端传输对称密钥的时候,需要用到服务端的公钥,但是这个公钥不需要我们自己生成,因为公钥是从私钥中提取出来的,而私钥可以通过命令获取对应的公钥,所以我们在向CA组织申请证书时不需要提供服务器的公钥,只需要提供私钥即可,如:#Demonstratethe公钥的提取方法(只演示公钥的提取过程,不需要申请证书)opensslrsa-inca.private.key-pubout-outca.public.pem备注:rsa:表示提取公钥-in:表示输入,即传入私钥-pubout:表示输出公钥②使用CA的私钥生成CA证书签名请求CSR文件CSR为证书签名请求(CertificateSigningRequest),这是生成证书时必须使用的文件。如果我们要制作CA组织的根证书,首先要生成对应的CSR文件,而CSR文件必须是私钥生成的,如:#使用CA的私钥生成一个CA证书签名请求csr文件opensslreq-new-keyca.private.key-outca.csr备注:req:表示生成证书签名请求-new:表示生成一个新的-key:表示生成生成时使用的私钥证书签名请求在生成CSR文件时,需要填写国家、省、市、组织或企业、部门、域名等信息。③使用CA的私钥和CA的证书签名请求文件生成CA的根证书。上面提到生成证书需要证书拥有者的私钥和证书签名请求文件,如:#使用CA的私钥和CACertificatesigningrequestfile的证书签名请求文件,生成CA根证书opensslx509-req-inca.csr-signkeyca.private.key-days3650-outca.root.crt注:x509:表示生成X509格式的证书-req:表示输入文件是一个“CertificateRequestforIssuanceFile(CSR)”,正在等待签发,也就是说已经有CA的机构。接下来就是给服务器颁发证书,如:④生成服务器的私钥#生成服务器的私钥opensslgenrsa-outserver.private.key1024⑤使用服务器的私钥生成服务器的证书签名请求csr文件#使用服务器的私钥生成服务器的证书签名请求csr文件opensslreq-new-keyserver.private.key-outserver.csr⑥通过CA组织向服务器颁发证书CA组织需要使用CA自己的私钥和CA自己的根来颁发证书证书和服务器的证书签名请求文件已经生成,如下:#使用CA的私钥,CA的根证书和服务器的证书签名请求文件生成服务器的证书opensslx509-req-CAca.root.crt-CAkeyca.private.key-CAcreateserial-inserver.csr-outserver.crt备注:x509:表示生成X509格式的证书-req:表示输入文件是“请求颁发证书文件(CSR))",waitSignandissue-CA:表示指定CA的根证书-CAkey:表示指定CA的私钥-CAcreateserial:表示自动生成证书的序列号,所以证书实际上是一个文件,包含钥匙。3.启动https服务器现在您可以使用服务器证书和服务器私钥创建一个https服务器。创建https服务器非常简单。主要是读取服务器的私钥和服务器证书,然后在创建服务器的时候传入就可以了,比如:varexpress=require('express');//引入https模块varhttps=require('https');varfs=require('fs');//同步读取密钥和签名证书constoptions={key:fs.readFileSync('./server.private.key'),cert:fs.readFileSync('./server.crt')}varapp=express();//创建https服务器时传入服务器私钥和服务器证书varhttpsServer=https.createServer(options,app);app.use(express.static("./dist"));//https监听8080端口httpsServer.listen(8080);启动服务器后,打开浏览器访问https://localhost:8080/index.html,会提示安装证书。安装好的证书如下,说明证书安装成功,可以正常访问https服务器: