为什么需要HTTPS
HTTP通信之间的一个安全通道,HTTPS
apple公司,要求所有企业上架app stone的APP,必须完全是https通信,否则不允许上架。 人家只支持https协议
你现在能见到的几乎所有的门户网站,都是https协议。
如今网络安全,国家大力推崇,网站的数据安全,服务器安全。也必然很重要。
https必须得上。
什么是https呢?
如下明文传输的协议,都是不安全的,因此,至少要放在内网,才保证基本安全
ftp vsftpd 账户密码验证 都是明文传输,人家直接看到你的账户密码
http协议 ,去登录淘宝,登录发送 login.html 账户密码截取。
smtp邮箱协议,邮箱协议,账号免密都被明文传输,
telnet协议 ,登录服务器的,登录资产设备,网络设备,服务器设备,都是明文。
要保证
client 通信之前
【加一层,加一个对数据加密的层,TLS/SSL层】
server
明文传输数据,会导致哪些问题
数据机密性
数据完整性
身份验证问题
关于https,和ssh的加密算法(非对称+对称加密)
为什么要用加密算法
什么是HTTPS
https不是一个单独的协议,
而是基于http而来
是
https = http + ssl(旧版) Secure Sockets Layer 安全套接字层
或者
https = http + tls (新版)Transport Layer Security) 传输层,安全协议
客户端,服务端证书通信流程
客户端,和服务端之间的https加密,解密全流程
1. 服务端有一对儿数字证书,包含私钥、公钥(非对称加密算法),也被称为CA证书,这个证书由专门的证书服务商提供,受互联网信任。(也可以自己创建CA证书,但是没人认。。)
2. 客户端发起https://请求,默认端口443
3. 服务端接收到请求后自动将自己的CA证书发给客户端
4. 客户端收到CA证书后,浏览器自动判断,是否在有效期内,是否受互联网信任,信任就是小绿锁,否则就是红色大叉。
5. 客户端如果验证证书通过、此时会【生成一个随机数】通过公钥对随机数加密
6. 客户端将这个【公钥加密后的随机数】发给服务端
7. 服务端接到这个【公钥加密后的随机数】后,使用自己的随机数解密,确认建立连接,后续的所有数据交互,通过这个随机数实现数据【对称加密】。
查看公有云,提供的证书购买功能,以及证书知识的介绍
各大云厂商
https://help.aliyun.com/document_detail/188316.html?spm=5176.14113079.help.dexternal.57f96b84CwPbL2
证书的类型
DV类型证书
类型证书适合个人和小微企业申请,
OV类型证书
企业验证型证书
EV类型证书
如银行开户许可证书。EV类型证书多使用于银行,金融,证券,支付等高安全标准行业
购买证书(阿里云部署https)
1.去阿里云 ssl证书控制台,申请20个免费的证书,但是都只能绑定单域名
https://yundun.console.aliyun.com/?p=cas#/certExtend/buy
证书申请,填写个人资料
新建证书管理员的联系人资料
RSA 非对称加密的证书
已经成功提交到CA公司,请您保持电话畅通,并及时查阅邮箱中来自CA公司的电子邮件。
等待7分钟后,你就可以使用这个
自建证书(openssl部署自建nginx证书)
如何自己去创建https证书
证书得创建,包含了创建者的信息
1.要安装openssl命令
yum install openssl openssl-devel -y
2.创建证书的目录,通过命令去创建
mkdir -p /etc/nginx/ssl-cert/
cd /etc/nginx/ssl-cert/
创建私钥文件
# 阿里云rsa非对称加密算法,密钥长度是2048,输出密钥信息到server.key文件中
# -idea是加密算法的名字
openssl genrsa -idea -out server.key 2048
输出私钥密码,为了保护私钥
必须输入密码才可以创建
lisa666
然后基于该私钥文件,创建证书(创建公钥)
# req创建证书,100年 证书规格,类型是-509类型,-newkey rsa:2048 基于rsa非对称加密算法,创建长度是2048的文件,创建证书,指定以哪个私钥去创建
-out server.crt 将公钥输出到server.crt文件中
# 你在创建公钥,证书的时候,会让你填写企业,组织信息
openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
查看证书的过期时间,证书信息
脚本,理解下就行,是一个小工具。
server_name=www.bilibili.com
# 获取网站的证书有效期
# 获取ssl过期时间的命令
# 1.获取有效期的日志
ssl_time=$(echo | openssl s_client -servername ${server_name} -connect ${server_name}:443 2>/dev/null | openssl x509 -noout -dates|awk -F '=' '/notAfter/{print $2}')
# 2.转换时间戳
# 把日志转变为时间戳,时间戳就可以去计算了
# 转为unix日期格式,然后可以对日期进行计算
ssl_unix_time=$(date +%s -d "${ssl_time}")
# 获取今天时间戳
today=$(date +%s)
# 计算剩余时间
# 利用let命令去数学运算
# 从到期时间,减去今天的日期,然后单位换算,看看过期还有多久
# 最终将时间戳,转为天的单位
let expr_time=($ssl_unix_time-$today)/24/3600
echo "${server_name} 该ssl证书剩余时间:$expr_time"
外网加密https,内网不加密http
以wordpress为入手。
部署lb-5机器
[root@lb-5 ~]#cat /etc/nginx/conf.d/wordpress.conf
# 这里定义后端的入口是 ip:33333
# 因此你后端的节点,nginx入口得是 listen 33333;
# 到这里都OK的扣 6,看不懂7
upstream wordpress_pools {
server 172.16.1.7:33333;
server 172.16.1.8:33333;
}
# 80虚拟主机,目的是为了匹配http请求的80端口,强制转发给https的443端口
# 1 . 目的是接收 http://wordpress.yuchaoit.cc;
server {
listen 80;
server_name wordpress.linux0224.cc;
rewrite ^(.*) https://$server_name$1 redirect;
}
# 2. https虚拟主机的设置
server {
listen 443 ssl;
server_name wordpress.linux0224.cc;
# 指定证书的地址
ssl_certificate /etc/nginx/ssl-cert/server.crt;
ssl_certificate_key /etc/nginx/ssl-cert/server.key;
# 反向代理,这里就基于http协议的转发,给后端机器组即可。
# 用的是proxy_pass
location / {
proxy_pass http://wordpress_pools;
include proxy_params;
}
}
# 重新启动nginx
部署wordpress后端机器组
nginx 去接收转发而来的请求,然后再通过fastcgi_pass 127.0.0.1:9000
并且转发的时候,添加让http数据,转为fastcgi_pass可认识的变量数据
这个流程记得扣 1,不记得 2
在部署了https之后
slb-5接收到 https的请求后,再转发给后端,需要后端框架支持。
# 让fastcgi协议,也认识https
写入到web7 和web8的nginx目录下
cat fastcgi_params
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
# enable https
# 因为,入口是https请求,转发到后端,url依然是https://wordpress.linux0224.cc,比如你来看
# 因此在这里要打开这个参数,记住就行,。
fastcgi_param HTTPS on;
生成nginx的配置文件
# 看懂扣 3,不懂 4
server {
listen 33333; # 因为slb的upstream里面写的就是33333
# 注意这个域名要和slb对上
server_name wordpress.linux0224.cc;
root /mysite/wordpress/;
index index.php index.html;
location ~ .php$ {
root /mysite/wordpress/;
# 发给fastcgi去执行php的wordpress源代码程序
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
客户端测试
10.0.0.5 wordpress.linux0224.cc
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...