Linux Nginx&HTTPS——HTTPS介绍、加密算法、SSL协议、HTTP风险、Nginx HTTPS部署(安全的网站部署)

HTTPS介绍
HTTPS(HyperText Transfer Protocol over Secure Socket Layer),Google 为了保证数据安全很早就开始启用了。 近些年互联网巨头,开始大力推行 HTTPS, 国内外的大型互联网公司基本也都已经启用了全站 HTTPS。

1、加密算法
对称加密【加密和解密都是使用的同一个密钥】
A要给B发送数据
1、A做一个对称密钥
2、使用密钥给文件加密
3、发送加密以后的文件和钥匙
4、B拿钥匙解密

非对称加密【公钥加密,私钥解密】
A要给B发送数据
1、B做一对非对称的密钥(公钥、私钥)
2、发送公钥给A
3、A拿公钥对数据进行加密
4、发送加密后的数据给B
5、B拿私钥解密

哈希算法
将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多。
如:MD5、SHA-1、SHA-2、SHA-256 等

数字签名
签名就是在信息的后面再加上一段内容(信息经过hash后的值),可以证明信息没有被修改过。hash值一般都会加密后(也就是签名)再和信息一起发送,以保证这个hash值不被修改。

2、HTTPS 协议介绍
HTTP 协议(Hyper Text Transfer Protocol,超文本传输协议),是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。

HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):可理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。

Linux Nginx&HTTPS——HTTPS介绍、加密算法、SSL协议、HTTP风险、Nginx HTTPS部署(安全的网站部署)_第1张图片

如图HTTPS 相比 HTTP 多了一层 SSL/TLS
SSL/TLS :SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层为数据通讯进行加密提供安全支持。

SSL协议可分为两层:
SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。相当于连接
SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 相当于通信

SSL协议提供的服务主要有:
ssl:身份认证和数据加密,保证数据完整性
1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程中不被改变。
3、HTTPS 原理

  • HTTP 访问过程

Linux Nginx&HTTPS——HTTPS介绍、加密算法、SSL协议、HTTP风险、Nginx HTTPS部署(安全的网站部署)_第2张图片

如上图所示,HTTP请求过程中,客户端与服务器之间没有任何身份确认的过程,数据全部明文传输,“裸奔”在互联网上,所以很容易遭到黑客的攻击,如下:
Linux Nginx&HTTPS——HTTPS介绍、加密算法、SSL协议、HTTP风险、Nginx HTTPS部署(安全的网站部署)_第3张图片

客户端发出的请求很容易被黑客截获,如果此时黑客冒充服务器,则其可返回任意信息给客户端,而不被客户端察觉。

  • HTTP 传输面临的风险有:

窃听风险:黑客可以获知通信内容。
篡改风险:黑客可以修改通信内容。
冒充风险:黑客可以冒充他人身份参与通信。

SSL 证书(申购)【既可以安全的获取公钥,又能防止黑客冒充】
证书:.crt, .pem
私钥:.key
证书请求文件:.csr

Linux Nginx&HTTPS——HTTPS介绍、加密算法、SSL协议、HTTP风险、Nginx HTTPS部署(安全的网站部署)_第4张图片

如图,在第 ② 步时服务器发送了一个SSL证书给客户端,SSL 证书中包含的具体内容有:
(1)证书的发布机构(CA认证中心)
(2)证书的有效期
(3)公钥
(4)证书所有者
(5)签名【签名就可以理解为是钞票里面的一个防伪标签】

客户端在接受到服务端发来的SSL证书时,会对证书的真伪进行校验。

  • 以浏览器为例:

(1)首先浏览器读取证书中的证书所有者、有效期等信息进行校验
(2)浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发
(3)如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。
(4)如果找到,那么浏览器就会从操作系统中取出颁发者CA 的公钥,然后对服务器发来的证书里面的签名进行解密
(5)浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比
(6)对比结果一致,则证明服务器发来的证书合法,没有被冒充
(7)此时浏览器就可以读取证书中的公钥,用于后续加密了
(8)client与web协商对称加密算法,client生成一个对称加密密钥并使用web公钥加密,发送给web服务器,web服务器使用web私钥解密
(9)使用对称加密密钥传输数据,并校验数据的完整性

所以相比HTTP,HTTPS 传输更加安全
(1) 所有信息都是加密传播,黑客无法窃听。
(2) 具有校验机制,一旦被篡改,通信双方会立刻发现。
(3) 配备身份证书,防止身份被冒充。

3、HTTPS 总结
优点:相比 HTTP 协议,HTTPS 协议增加了很多握手、加密解密等流程,虽然过程很复杂,但其可以保证数据传输的安全。

缺点:
SSL 证书费用很高,以及其在服务器上的部署、更新维护非常繁琐
HTTPS 降低用户访问速度(多次握手)
网站改用HTTPS 以后,由HTTP 跳转到 HTTPS 的方式增加了用户访问耗时(多数网站采用302跳转)
HTTPS 涉及到的安全算法会消耗 CPU 资源,需要增加大量机器(https访问过程需要加解密)

  • Nginx HTTPS 部署实战

1、申请证书与认证
要搭建https服务首先需有SSL证书,证书通常是在第三方申请,在阿里云的安全服务中有SSL证书这一项,可以在里面申请免费的证书;
也可以在自己电脑中生成,虽然也能完成加密,但是浏览器是不认可的,因此最好还是去第三方申请

  • 证书申请

购买域名服务厂商提供免费的证书(如阿里云腾讯云等),用来做测试是非常不错的选择,申请地址进入域名解析页点击SSL选项。【免费型的证书隐藏的比较深,仔细找找都可以找到】

选择之后,一直点击下一步,便可购买完成,免费购买证书之后需要回到证书控制台,在控制台有一个补全信息的链接地址,需要通过此地址补充信息。

  • 域名验证

补全个人信息之后,还需要给阿里云验证当前域名是属于本人的,验证方式有两种,第一种是通过dns解析认证,第二种是通过上传验证文件认证,这里采用的是验证文件认证,首先需要下载文件。

在下载验证文件完成之后,需要把文件放到服务器中去:

#scp ~/Downloads/fileauth.txt  [email protected]:~/

将验证文件复制到服务器之后,还需要将验证文件放到站点对应目录,命令:

# cd /usr/share/nginx/html/
#mkdir -p /website/.well-known/pki-validation  &&  cp  fileauth.txt  /website/.well-known/pki-validation/
# cd && vim /etc/nginx/nginx.conf
server {
        listen       80;
        server_name  localhost;
        location / {
             root /usr/share/nginx/html/website;
        }
  • 验证

1、手动验证
手动验证的目的是首先确保文件位置放置是否正确,可以通过访问站点的url是否成功进行判断,比如可以访问如下URL,如果返回如果页面能够正常打开,并且可以看到某些值,则代表配置成功。

2、通过阿里云来验证
在确保文件放置正确之后,关键的是能让阿里云能访问到,阿里云提供了一个检查配置的功能,在下载验证文件页面,有一个检测配置的链接,单击之后便可进行检查,如下图。

当点击 检查配置 之后,如果阿里云能够正常访问,则会在左侧给出提示,现在可以返回证书列表,在列表中可以看到当前状态为审核中。
审核因为不需要人为干预,所以很快就能下发证书,下发证书的时间大约是1-3分钟左右。

  • 证书下载与配置

1、证书下载
证书签发之后,可以在列表中可以看到状态栏中为 已签发 ,同时操作栏可以下载以及查看详情等。

点击下载后,会跳转到下载详情页面,在下载详情页可以选择自己相对应的web服务,比如使用nginx,当选择nginx之后,云服务厂商会提示如何配置,下载nginx配置文件。

下载配置文件之后,需要将其解压,解压之后可以看见里面包含了两个证书文件
xxx.key
xxx.pem
接着需要把这两个证书文件给发送//上传到服务器当中去,首先需要在服务器创建对应的文件夹,参考命令:

# cd /etc/nginx/ && mkdir cert

在服务器创建完成对应文件夹之后,将证书文件复制到服务器中

2、证书配置
证书复制完成之后,可以对nginx配置文件进行更改,使用vim命令编辑nginx配置文件,参考命令如下:

# cd /etc/nginx/conf.d/
# cp default.conf default.conf.bak
# mv default.conf nginx_ssl.conf
# vim nginx_ssl.conf
# cat /etc/nginx/conf.d/nginx_ssl.conf 
server {
    listen 443 ssl;
    server_name www.testpm.cn;
    access_log  /var/log/nginx/https_access.log  main;#ssl on;
    ssl_certificate   /etc/nginx/cert/2447549_www.testpm.cn.pem;
    ssl_certificate_key  /etc/nginx/cert/2447549_www.testpm.cn.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;
​
    location / {
        root  /usr/share/nginx/html;
        index index.html index.htm;
    }
}
  • 重启Nginx

修改配置文件之后,需要测试nginx配置文件是否正确

# nginx -t 
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# nginx -s reload

如果看到浏览器,展示安全,并且显示绿色就说明大功告成了!

你可能感兴趣的:(云计算初阶-Linux运维实战,云计算初阶-Linux入门,Linux,中阶——企业应用实战,nginx,http,https,ssl,linux)