谈谈Nginx-HTTPS加密技术

时间:2024-06-21 08:02:55

超文本传输安全协议(HTTPS)是以安全为目标的HTTP通道,简单来说就是HTTP安全版。https由两个部分组成:HTTP+SSL/TLS,在http基础上加上了一层加密信息模块,服务端和客户端的信息插损胡都会通过TLS进行加密,传输的数据都是加密后的数据

为了解决HTTP协议的这些缺陷,需要使用另一种协议:HTTPS。为了数据传输的安全性,HTTPS在http的基础上加了SSL协议,SSL依靠证书验证身份,并为浏览器和服务器之间通信加密;

SSL证书是一种数字证书,使用Secure Socket Layer协议在浏览器和web服务器之间建立一条安全通道,从而实现数据信息在客户端和服务器之间的加密传输,保证双方传递信息的安全性,不可被第三方窃听,而且用户可以通过服务器证书验证所访问网站是否真实可靠;

加密的HTTPS和HTTP的区别:超文本传输协议HTTP协议被用于在web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的加密数据,如果攻击者截取了web浏览器和网站服务器之间的传输报文,就可以直接读取其中信息,因此,http协议不适合传输一些铭感信息;

HTTPS加密,解密,验证完成过程如图所示:

首先客户端发送请求,服务端接受到请求之后并申请生成公私秘钥,同时将公钥证书发送给客户端,客户端收到之后并通过TLS进行解析验证,如果证书没有问题就会在客户端生成一个加密随机值,将随机值发送给服务端,服务端接收到之后,用自己的私钥解密,从而得到这个随机值,然后通过这个随机值对内容进行对称加密。服务端将用私钥加密后的信息发送给客户端,最后,客户端用之前生成的私钥来解密服务器端发过来的信息,获取解密后的内容

谈谈Nginx-HTTPS加密技术

1)客户端向服务端发起HTTPS请求,用户在浏览器输入https网址,然后连接到Nginx server的443端口

2)服务端采用https协议有一套数字证书,该证书可以自行配置,也可以向证书管理组织去申请,该证书其本质是公钥和私钥

3)将公钥传送给客户端,证书包含了很多信息,例如,证书的颁发机构,过期时间等等

4)客户端解析证书,由客户端的TLS完成,首先会验证公钥是否有效,比如颁发的机构,过期时间等,如果发生异常,则会弹出警告信息,提示证书存在问题,如果证书没有问题,就会随机生成数值,然后用证书对该随机数值进行加密

5)将证书加密后的随机值传送到服务器,让服务器获取该随机值,后续客户端和服务端可以通过该随机值来进行加密解密

6)服务端用私钥解密后,得到了客户端传过来的随机值,然后把内容通过该值进行了对称加密

7)服务端将私钥加密后的信息发给客户端

8)客户端用之前生成的私钥来解密服务端发送过来的信息,获取解密后的内容

【证申请与颁发过程】

#可以通过openssl生成服务端的RSA秘钥以及证书

[root@Nginx-web ~]# openssl genrsa -des3 -out server.key 1024

谈谈Nginx-HTTPS加密技术

#创建签名请求的证书CSR

[root@Nginx-web ~]# openssl req -new -key server.key -out server.csr

谈谈Nginx-HTTPS加密技术

#加载SSL支持的Nginx并使用私钥去除 口令

[root@Nginx-web ~]# cp server.key server.keybak

[root@Nginx-web ~]# openssl rsa -in server.keybak -out server.key

#自动签发证书

[root@Nginx-web ~]# openssl x509 -req -days 10240 -in server.csr -signkey server.key -out server.crt

[root@Nginx-web ~]# yum install -y pcre-devel openssl-devel popt-devel

[root@Nginx-web ~]# useradd -M -s /sbin/nologin nginx
[root@Nginx-web ~]# tar zxvf nginx-1.11.2.tar.gz -C /usr/src/

[root@Nginx-web nginx-1.11.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module

[root@Nginx-web nginx-1.11.2]# make

[root@Nginx-web nginx-1.11.2]# make install

[root@Nginx-web nginx-1.11.2]# ln -s /usr/local/nginx/sbin/nginx  /usr/local/sbin/

 worker_processes  ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
server {
listen ;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page /50x.html;
location = /50x.html {
root html;
}
} server {
         listen         ssl;
server_name localhost;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
}

如果仅仅是通过443端口访问Nginx web网站的话,那么配置文件如下(那么这个时候,你默认输入IP或者是域名是无法访问的,只能前面加上https)

worker_processes  ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
server {
listen ssl;
server_name localhost;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
}

PS:配置完成之后这里就会有一个坑,报一下这个错,纠结了很久。。。其实当时看日志就可以知道,这是由于证书 的路径 错误~,我们将其拷贝到nginx的conf下面即可

谈谈Nginx-HTTPS加密技术

谈谈Nginx-HTTPS加密技术

[root@Nginx-web ~]# cp server.crt server.key /usr/local/nginx/conf/

重启Nginx-web服务,可通过netstat或者ps -ef 验证是否启动

谈谈Nginx-HTTPS加密技术

谈谈Nginx-HTTPS加密技术