这里是个人做实验,所以自己创建证书,如果是公司,需要购买证书。
1.https简介
HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据
2.https协议原理
首先,客户端与服务器建立连接,各自生成私钥和公钥,是不同的。服务器返给客户端一个公钥,然后客户端拿着这个公钥把要搜索的东西加密,称之为密文,并连并自己的公钥一起返回给服务器,服务器拿着自己的私钥解密密文,然后把响应到的数据用客户端的公钥加密,返回给客户端,客户端拿着自己的私钥解密密文,把数据呈现出来
基于SSL的网站基于非对称加密算法
第一步:生成私钥和证书
openssl genrsa -out cert.key 2048 #生成rsa算法的私钥2048位
openssl req -new -x509 -key cert.key -out cert.pem #生成证书
cp {cert.key,cert.pem} /application/nginx-1.12.2/conf/
步骤二:修改Nginx配置文件调用私钥和证书对网站加密
server {
listen 443 ssl;
server_name xxx.com;
ssl on;
ssl_certificate cert.pem; #指定证书存放位置
ssl_certificate_key cert.key; #指定私钥存放位置
ssl_session_cache shared:SSL:10m; #在建立完ssl握手后如果断开连接,在session_timeout时间内再次连接,不需要再次建立握手,可以复用之前的连接,单位兆
ssl_session_timeout 1440m; #是定SSL会话超时时间单位秒
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #指定SSL协议版本
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #指定SSL加密算法
ssl_prefer_server_ciphers on; #指定优先采用服务器端加密算法
location / {
root /web2;
index index.html index.htm;
}
}
server {
listen 80;
server_name xxx.com;
return 302 https://$server_name$request_uri;
}
如果负载后面的机器是动态网站,前端配了https后端php会不知道使用的是什么协议造成错误.
后端nginx配置
location ~ \.php$ {
root /www;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param HTTPS on; #告诉后端PHP使用的是https
}