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

1. 现在为什么流行使用https协议搭建web服务?

1.1、http与https之间的区别?

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

传送门:Http和Https究竟有啥不一样?

1.2、https协议是如何工作的?

一、client向server发送请求,然后连接到443端口;
二、服务端要有一套数字证书(SSL证书),一般证书通过向CA机构申请获得,现在也可以手动生成,但是手动生成的证书目前不被浏览器所信任,还有就是向阿里云、百度云、腾讯云申请免费的证书,不过这种申请方式需要你有自己的服务器和域名。
三、传送证书:服务器将证书传送给客户端,证书内容包含证书颁发机构、过期时间、服务端公钥、CA签名、服务器域名信息等等。
四、客户端验证证书:客户端根据证书的信息验证服务器身份,以及证书是否存在问题。同时,客户端会产生一个随机值(对称密钥),接着用服务器公钥对密钥进行加密。
五、传送加密信息:客户端将加密后的密钥传送给服务器,目的就是让服务器得到这个密钥,之后客户端和服务端通过这个密钥进行通信。
六、服务端获取随机值:因为传过来的密钥经过了公钥加密,所以服务器使用私钥进行解密获取随机值。
七、通讯:这时客户端和服务器都有这个随机值,客户端使用这个随机值对请求参数加密后传送给服务器,服务器将返回用随机值加密后的数据给客户端。客户端用公钥解密response,服务器用私钥解密request。
关键字解释:SSL证书其实就是一对公钥和密钥,公钥被用于在客户端解密对称密钥,私钥被用于在服务器解密对称密钥;对称密钥用于客户端和服务端的通信。

1.3、https原理示意图

图片描述

2. 如何获取SSL证书?

2.1、手动生成证书

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

一、安装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...

二、使用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服务:

    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.2、免费申请SSL证书

ps:免费申请SSL证书的服务商很多,但是申请需要你有自己的服务器和域名,申请后在服务器上面的配置可以参考服务商提供的文档进行配置。
地址列表:
https://www.chinassl.net/sslt...
https://www.aliyun.com/produc...
https://cloud.baidu.com/produ...
https://buy.cloud.tencent.com...


记得要微笑
1.9k 声望4.5k 粉丝

知不足而奋进,望远山而前行,卯足劲,不减热爱。


下一篇 »
深度理解token