一、HTTPS的基本概述
1.为什么要使用https
http使用的是明文传输,在传输重要信息时不能保证安全。(交易信息、账户信息、银行卡号......)监听获取。
而https是密文传输的,能够保证信息的安全,避免了网站传输的信息被泄露。
2.什么是https
SSL(网景公司,套接字安全协议)------>TLS(传输层安全协议)
3.TLS协议是如何实现明文消息被加密的
TLS与SSL在传输层和应用层之间对网络连接进行加密
1.提供数据安全,保证数据尽可能不被泄露。
2.提供数据的完整性,保证数据在传输的过程中,不被修改或者篡改数据。
3.对应用层交给传输层的数据进行加密与解密。
4.HTTPS加密模型
名称 | 含义 |
---|---|
对称加密 | 相同的秘钥 |
非对称加密 | 一对秘钥,公钥加密,私钥加密 |
CA机构:可信的组织机构,主要用来颁发证书的
5.HTTPS 是如何实现加密和解密的,TLS/通讯过程
https采用的是混合加密算法:使用了对称加密和非对称加密。
前提:CA机构申请证书,部署在web服务器上
二、使用https的操作
1.openssl方法配置https证书
[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
[root@web01 ssl_key]# openssl req -days 36500 -x509 \
-sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
[root@web01 ~]# ll /etc/nginx/ssl_key/
total 8
-rw-r--r-- 1 root root 1359 May 7 10:45 server.crt
-rw-r--r-- 1 root root 1704 May 7 10:45 server.key
2.在Nginx中配置证书、
[root@web01 ~]# cat /etc/nginx/conf.d/s.mrche.xyz.conf
server {
listen 443 ssl;
server_name s.mrche.xyz;
root /code;
ssl_certificate ssl_key/server.crt;
ssl_certifcate_key ssl_key/server_key;
ssl_protocol TLSv1.2;
location / {
index index.html;
}
}
#当用户请求http://s.mrche.xyz 则强制跳转到https协议
server {
listen 80;
server_name s.mrche.xyz;
return 302 https://$server_name$request_uri;
}
3.一个LNMP架构的网站,如果在负载均衡上配置证书,web服务器就不需要配置了,只需要添加fastcgi_param HTTPS on; 就可以了
4.模拟银行主页面点击登录按钮,跳转到https协议
[root@web01 ~]# cat /etc/nginx/conf.d/yh.mrche.xyz.conf
server {
listen 80;
server_name yh.mrche.xyz;
root /code;
location / {
index index.html;
}
location /login {
return 302 https://login.mrche.xyz;
}
}
[root@web01 ~]# cat /etc/nginx/conf.d/login.mrche.xyz.conf
server {
listen 80;
server_name login.mrche.xyz;
root /code/login;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
return 302 https://login.mrche.xyz;
}
}
三、HTTPS的优化
减少CPU的运算量
SSL的运行计算需要消耗额外的CPU资源,SSL通讯过程中“握手”阶段的运算最占用CPU资源
1.设置worker进程数设置为等于CPU处理器的核心数。worker——processes auto;
2.启用 keepalive 长连接,一次连接多次请求。
3.启用SSL会话缓存参数,避免进行多次SSL握手。
server {
listen 443 ssl;
server_name www.example.com;
keepalive_time 70; #设置长连接
ssl_certificate www.example.com.crt;
ssl_certificate_key www.example.com.key;
ssl_protocol TLSv1.2;
#在建立完ssl握手后如果断开链接,在session_timeout时间内再次连接,是不需要再次建立三次握手,直接可以服用之前的连接。
ssl_session_cache chared:SSL:10m; #1M缓存空间能存储4000个会话数量
ssl_session_timeout 1024m; #配置会话超时时间(默认5分钟)
}