https

随笔3天前发布 麦芒律师
10 0 0

为什么需要HTTPS

HTTP通信之间的一个安全通道,HTTPS

apple公司,要求所有企业上架app stone的APP,必须完全是https通信,否则不允许上架。 人家只支持https协议

你现在能见到的几乎所有的门户网站,都是https协议。

如今网络安全,国家大力推崇,网站的数据安全,服务器安全。也必然很重要。

https必须得上。

什么是https呢?

https
如下明文传输的协议,都是不安全的,因此,至少要放在内网,才保证基本安全

ftp vsftpd 账户密码验证 都是明文传输,人家直接看到你的账户密码

http协议 ,去登录淘宝,登录发送 login.html 账户密码截取。
smtp邮箱协议,邮箱协议,账号免密都被明文传输,
telnet协议 ,登录服务器的,登录资产设备,网络设备,服务器设备,都是明文。

要保证
client 通信之前
【加一层,加一个对数据加密的层,TLS/SSL层】
server

明文传输数据,会导致哪些问题

数据机密性
https
数据完整性
https
身份验证问题
https

关于https,和ssh的加密算法(非对称+对称加密)

https

为什么要用加密算法

https
https
https

什么是HTTPS

https不是一个单独的协议,
而是基于http而来
是 
https =   http +  ssl(旧版)  Secure Sockets Layer  安全套接字层
或者
https =  http  + tls  (新版)Transport Layer Security) 传输层,安全协议

https
https

客户端,服务端证书通信流程

https

客户端,和服务端之间的https加密,解密全流程

https

1. 服务端有一对儿数字证书,包含私钥、公钥(非对称加密算法),也被称为CA证书,这个证书由专门的证书服务商提供,受互联网信任。(也可以自己创建CA证书,但是没人认。。)

2. 客户端发起https://请求,默认端口443

3. 服务端接收到请求后自动将自己的CA证书发给客户端

4. 客户端收到CA证书后,浏览器自动判断,是否在有效期内,是否受互联网信任,信任就是小绿锁,否则就是红色大叉。

5. 客户端如果验证证书通过、此时会【生成一个随机数】通过公钥对随机数加密

6. 客户端将这个【公钥加密后的随机数】发给服务端

7. 服务端接到这个【公钥加密后的随机数】后,使用自己的随机数解密,确认建立连接,后续的所有数据交互,通过这个随机数实现数据【对称加密】。

https
https
https

查看公有云,提供的证书购买功能,以及证书知识的介绍

各大云厂商
https://help.aliyun.com/document_detail/188316.html?spm=5176.14113079.help.dexternal.57f96b84CwPbL2

证书的类型

DV类型证书
类型证书适合个人和小微企业申请,
OV类型证书
企业验证型证书
EV类型证书
如银行开户许可证书。EV类型证书多使用于银行,金融,证券,支付等高安全标准行业
https

购买证书(阿里云部署https)

1.去阿里云 ssl证书控制台,申请20个免费的证书,但是都只能绑定单域名
https://yundun.console.aliyun.com/?p=cas#/certExtend/buy

证书申请,填写个人资料
新建证书管理员的联系人资料
RSA 非对称加密的证书
已经成功提交到CA公司,请您保持电话畅通,并及时查阅邮箱中来自CA公司的电子邮件。
等待7分钟后,你就可以使用这个

https

自建证书(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为入手。
https

部署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

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...