为什么要使用https
http使用的是明文传输,在传输敏感交易信息时不安全。(交易信息、账号密码、银行卡号……)别人会通过监听来获取到我们的这些信息。
https在数据传输过程中是加密的,能够有效避免网站传输时信息的泄露。
什么是https
现在很多公司都是使用https来实现站点数据传输的安全的。早期由网景公司涉及了ssl安全套接层协议、TLS协议、传输层安全协议。
TLS协议是如何实现铭文信息被加密
TLS与SSL在传输层与应用层之间对网络连接进行加密。
- 提供数据安全,爆炸数据尽可能不被泄露。
- 提供数据的完整性,爆炸数据在传输的过程中,不会被修改或者篡改数据。
- 对应用层交给传输层的数据进行加密与解密。
https加密模型
对称机构:相同的密钥
非对称加密:一对密钥,公钥加密,私钥解密
CA机构:可信任的组织机构,主要用来颁发证书。
CA机构证书颁发过程:
https的传输过程
证书类型
DV:域名型,实现简单的https加密需求,个人站点和应用
OV:企业型,电子商务类,企业中使用
EV:增强型,
证书购买
证书是捆绑域名的:
保护一个域名:www.wenjie.com
保护多个域名:www.wenjie.com
只能保护列出的多个域名
通配符域名:*.wenjie.com
能保护所有通配符能够匹配的域名
证书注意事项
绿色:安全传输
红色:表示证书过期或者证书不受信任
黄色:表示该https中包含了http协议
https配置
1. 模拟生成证书
[root@web01 ~]# mkdir /etc/nginx/ssl_key
[root@web01 ~]# cd /etc/nginx/ssl_key
[root@web01 ssl_key]# openssl genrsa -idea -out server.key 2048
#密码1234
[root@web01 ssl_key]# openssl req -days 36500 -x509 \
-sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
.....自己随意填写
2.在Nginx中配置证书
[root@web01 ssl_key]# cat /etc/nginx/conf.d/s.wenjie.com.conf
server {
listen 443 ssl;
server_name s.wenjie.com;
root /code;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
ssl_protocols TLSv1.2;
location / {
index index.html;
}
}
3.访问,请带上https
4.如果希望http访问,强制转到https
[root@web01 ssl_key]# cat /etc/nginx/conf.d/s.wenjie.com.conf
#当有用户请求http://s.wenjie.com 则强制跳转为https协议。
server {
listen 80;
server_name s.wenjie.com;
return 302 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name s.wenjie.com;
root /code;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
ssl_protocols TLSv1.2;
location / {
index index.html;
}
}
集群实现https
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_s.wenjie.com.conf
upstream http {
server 172.16.1.7:80;
server 172.16.1.8:80;
}
server {
listen 80;
server_name s.wenjie.com;
location / {
proxy_pass http://http;
include proxy_params;
}
}
[root@lb01 ~]# systemctl reload nginx
2.改造http为https协议
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_s.wenjie.com.conf
upstream http {
server 172.16.1.7:80;
server 172.16.1.8:80;
}
#2.用户请求https协议,贼通过负载均衡方式请求资源池,使用的是http协议
server {
listen 443 ssl;
server_name s.wenjie.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
proxy_pass http://http;
include proxy_params;
}
}
#1.用户请求http协议,强制跳转至https协议
server {
listen 80;
server_name s.wenjie.com;
return 302 https://$server_name$request_uri;
}
改造wordpress网站为https
只需要在修改负载均衡服务器上的nginx配置文件的server层添加如下内容:
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
然后新建一个server层,在其中实现强制跳转http为https,内容如下:
server {
listen 80;
server_name s.wenjie.com;
return 302 https://$server_name$request_uri;
}
这个时候我们会发现我们的网站的格式会丢失,这时候我们只需要在我们的web服务器的nginx相应的配置文件的server层中添加
fastcgi_param HTTPS on;
即可。
ssl_session_cache; 配置共享会话缓存大小
ssl_session_timeout; 配置共享会话超时时间
keepalive_timeout 70; 设置长链接
配置优化https:
减少 CPU 运算量
SSL的运行计算需要消耗额外的 CPU 资源,SSL通讯过程中『握手』阶段的运算最占用 CPU 资源,有两个方法可以减少每台客户端的运算量:
1.激活 keepalive 长连接,一个连接发送更多个请求
2.复用 SSL 会话参数,在并行并发的连接数中避免进行多次 SSL『握手』
例子如下所示:
server {
listen 443 ssl;
server_name www.example.com;
keepalive_timeout 70; #设置长连接
ssl_certificate www.example.com.crt;
ssl_certificate_key www.example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:10m; #配置共享会话缓存大小 (1M缓存空间能存储 4000 个会话数量 )
ssl_session_timeout 10m; #配置会话超时时间
}
模拟银行场景:
1.主页http协议 http://yh.wenjie.com (提供网页浏览)
2.模拟登陆 http://yh.wenjie.com/login (相当于点击了登陆按钮)
3.新域名下,使用的是https协议。 https://star.wenjie.com (提供安全登陆)
1.配置 https://star.wenjie.com
[root@web01 ~]# cat /etc/nginx/conf.d/star.wenjie.com.conf
server {
listen 443 ssl;
server_name start.wenjie.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
root /code/login;
location / {
index index.html;
}
}
[root@web01 ~]# mkdir /code/login -p
[root@web01 ~]# echo “login…https” > /code/login/index.html
2.配置 http://yh.wenjie.com
[root@web01 ~]# cat /etc/nginx/conf.d/yh.wenjie.com.conf
server {
listen 80;
server_name yh.wenjie.com;
root /code;
location / {
index index.html;
}
location /login {
return 302 https://start.wenjie.com;
}
}