如何搭建https服务

序言:最近在作一个虚拟项目,搭建服务时想到使用https协议,由于https会对参数进行加密处理,比http使用明文传输安全,下面将主要介绍https与http之间的区别以及如何使用https搭建一个更加安全的web服务。

1. 如今为何流行使用https协议搭建web服务?

1.一、http与https之间的区别?

1、https协议须要到CA机构申请证书(证书就是一对公钥和私钥),会产生必定费用。
2、http是超文本传输协议,采用明文传输,若是攻击者截取了web浏览器和网站服务器的传输报文,就能直接读懂其中的信息。而https在http基础上加入了SSL协议,SSL依靠证书来验证服务器身份,并为浏览器和服务器之间的通讯加密,比http协议更加安全。
3、http协议端口是80,https协议端口是443。
4、http工做于应用层,https工做在传输层。
从二者的区别来看,https协议比http协议更加的安全。html

1.二、https协议是如何工做的?

1、client向server发送请求,而后链接到443端口;
2、服务端要有一套数字证书(SSL证书),通常证书经过向CA机构申请得到,如今也能够手动生成,可是手动生成的证书目前不被浏览器所信任,还有就是向阿里云、百度云、腾讯云申请免费的证书,不过这种申请方式须要你有本身的服务器和域名。
3、传送证书:服务器将证书传送给客户端,证书内容包含证书颁发机构、过时时间、服务端公钥、CA签名、服务器域名信息等等。
4、客户端验证证书:客户端根据证书的信息验证服务器身份,以及证书是否存在问题。同时,客户端会产生一个随机值(对称密钥),接着用服务器公钥对密钥进行加密。
5、传送加密信息:客户端将加密后的密钥传送给服务器,目的就是让服务器获得这个密钥,以后客户端和服务端经过这个密钥进行通讯。
6、服务端获取随机值:由于传过来的密钥通过了公钥加密,因此服务器使用私钥进行解密获取随机值。
7、通信:这时客户端和服务器都有这个随机值,客户端使用这个随机值对请求参数加密后传送给服务器,服务器将返回用随机值加密后的数据给客户端。客户端用公钥解密response,服务器用私钥解密request。
关键字解释:SSL证书其实就是一对公钥和密钥,公钥被用于在客户端解密对称密钥,私钥被用于在服务器解密对称密钥;对称密钥用于客户端和服务端的通讯。web

1.三、https原理示意图

图片描述

2. 如何获取SSL证书?

2.一、手动生成证书

目前各大浏览器好像都不支持手动生成的SSL证书,最好仍是申请一个官网的SSL证书。express

1、安装OpenSSL浏览器

OpenSSL is a robust, commercial-grade, and full-featured toolkit for
the Transport Layer Security (TLS) and Secure Sockets Layer (SSL)
protocols. It is also a general-purpose cryptography library.
上面大体意思就是说OpenSSL不只是一个是用于TLS和SSL强大、开源的工具包,并且也是一个通用的加密库。

OpenSSL下载网址:https://slproweb.com/products...安全

2、使用OpenSSL生成证书服务器

openssl genrsa 1024 > /pathway/private.pem
    openssl req -new -key /pathway/private.pem -out csr.pem
    openssl x509 -req -days 365 -in csr.pem -signkey /pathway/private.pem -out /pathway/file.crt
    其中,/pathway表示执行该命令文件夹下的路径,生成的.crt文件就是SSL证书。

在express中使用证书创建https服务:app

const express = require('express');
    var fs = require('fs');
    var https = require('https');
    
    https.createServer({
      key: fs.readFileSync('./certificate/private.pem'),
      cert: fs.readFileSync('./certificate/file.crt'),
      // requestCert: false,
      // rejectUnauthorized: false,
    }, app).listen(process.env.PORT || 8080, () => console.log(`Listening on port ${process.env.PORT || 8080}!`));

2.二、免费申请SSL证书

ps:免费申请SSL证书的服务商不少,可是申请须要你有本身的服务器和域名,申请后在服务器上面的配置能够参考服务商提供的文档进行配置。
地址列表:
https://www.chinassl.net/sslt...
https://www.aliyun.com/produc...
https://cloud.baidu.com/produ...
https://buy.cloud.tencent.com...工具

相关文章
相关标签/搜索