Web服务器协议之Https简介
HTTPS概述
基于http协议,传输的时候进行加密
如果不使用https,数据传输都是明文的
1.应用场景:
目前大部分都是使用https加密
企业想使用http 2.0 基于https
2.部署https加密的流程
-
申请域名
- 根据域名申请https证书(私钥与公钥(ca证书)
-
数字证书管理服务(原SSL证书)SSL数字证书HTTPS加密服务器证书CA认证
-
Https加密流程与http跳转https
温馨提示
申请的https证书与网站域名一致,才能正常使用,否则用户访问会有警告与提示
[root@web01 ~]# mkdir -p /etc/nginx/ssl/
[root@web01 ~]# unzip 8458094_ssl.yuanliunx.cn_nginx.zip -d /etc/nginx/ssl
Archive: 8458094_ssl.yuanliunx.cn_nginx.zip
Aliyun Certificate Download
inflating: /etc/nginx/ssl/8458094_ssl.yuanliunx.cn.pem
inflating: /etc/nginx/ssl/8458094_ssl.yuanliunx.cn.key
[root@web01 ~]# cd /etc/nginx/ssl/
[root@web01 /etc/nginx/ssl]# ll,下面是你解压的两个密钥文件
#代码从下面开始-------------------------------------------
[root@web01 /etc/nginx/conf.d]# cat ssl.yuanliunx.cn.conf
server{
listen 80;
server_name ssl.yuanliunx.cn; #域名是自己的域名
return 302 https://ssl.yuanliunx.cn$request_uri; #设置跳转
#rewrite ^(.*)$ https://ssl.yuanliunx.cn$1 permanent;
}
server {
listen 443 ssl; #修改这一行,记得加ssl
server_name ssl.yuanliunx.cn ;
root /app/code/ssl;
error_log /var/log/nginx/ssl-error.log notice;
access_log /var/log/nginx/ssl-access.log main;
#ssl key 增加证书
ssl_certificate /etc/nginx/ssl/ssl.yuanliunx.cn.pem;
ssl_certificate_key /etc/nginx/ssl/ssl.yuanliunx.cn.key;
location / {
index index.html;
}
}
命令行创建https证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
----------------------
#创建私钥
openssl genrsa -idea -out server.key 2048
#根据私钥创建 证书
openssl req -days 36500 -x509 -sha256 -nodes -newkeyrsa:2048 -keyout server.key -out server.crt
4、网站集群https配置
4.1 https+https
upstream:负载均衡服务器,lb01, https
https: web01
[root@lb01 ~]# cat /etc/nginx/conf.d/ssl.yuanliunx.cn.conf
upstream ssl_pools{
server 10.0.0.7:443; #修改为443
}
server {
listen 80;
server_name ssl.yuanliunx.cn;
return 302 https://ssl.yuanliunx.cn$request_uri; #跳转修改为https
}
server {
listen 443 ssl; #修改为443
server_name ssl.yuanliunx.cn;
ssl_certificate /etc/nginx/ssl/ssl.yuanliunx.cn.pem; #添加证书
ssl_certificate_key /etc/nginx/ssl/ssl.yuanliunx.cn.key; #添加证书
error_log /var/log/nginx/ssl.cn-error.log notice;
access_log /var/log/nginx/ssl.cn-access.log main;
location / {
proxy_pass https://ssl_pools; #注意这里是https
proxy_set_header Host $http_host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
#---------------------------------------------------------------
[root@web01 ~]# cat /etc/nginx/conf.d/ssl.yuanliunx.cn.conf
server{
listen 80;
server_name ssl.yuanliunx.cn;
return 302 https://ssl.yuanliunx.cn$request_uri;
#rewrite ^(.*)$ https://ssl.yuanliunx.cn$1 permanent;
}
server {
listen 443 ssl;
server_name ssl.yuanliunx.cn ;
root /app/code/ssl;
error_log /var/log/nginx/ssl-error.log notice;
access_log /var/log/nginx/ssl-access.log main;
#ssl key
ssl_certificate /etc/nginx/ssl/ssl.yuanliunx.cn.pem;
ssl_certificate_key /etc/nginx/ssl/ssl.yuanliunx.cn.key;
location / {
index index.html;
}
}
php配置https要加上
fastcgi_param HTTPS on; #前面部分的请求是https
4.2 https+http
#修改负载均衡器:
https
#1.池子
upstream ssl_pools{
#server 192.168.174.7:443;
server 192.168.174.8:80; #web02
}
#其他不用动..
location / {
#proxy_pass https://ssl_pools; #
proxy_pass http://ssl_pools;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
web02:内网:
http
代码:
/etc/nginx/ssl,需要有对应的文件
scp ./nginx* root@web02:`pwd`
创建一个目录
/app/code/mylinux
在里面创建一个index.html
echo 'web02 mylinux' >/app/code/mylinux/index.html
/子排位置文件;
/etc/nginx/conf.d/mylinux.cn.conf
server{
listen 80;
server_name mylinux.cn;
root /app/code/mylinux;
location / {
index index.html;
}
}
//配置/etc/hosts
ip mylinux.cn
出来mylinux02标识成功了!!!!
https+https:适用于对安全性比较高的网站;!金融 保险 支付等等;
https+http : 新闻类的、博客、文章,一般性的网站即可!!!
5.https优化与监控
5.1.优化
https === http over tls
server {
listen 443 ssl;
keepalive_timeout 70;
#抓包测试指定ssl加密协议的版本
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#加密算法.需要排除算法 排除null空算法, md5算法
ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4- MD5:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5;
ssl_certificate /usr/local/nginx/conf/cert.pem;
ssl_certificate_key /usr/local/nginx/conf/cert.key;
#设置https 会话缓存
ssl_session_cache shared:SSL:10m;
#超时时间 10分钟
ssl_session_timeout 10m;
}
#https://md5.cc/ 解密网站;
5.2.监控
过期时间
流程:
通过命令获取证书的过期日期
与当前日期对比(30天之前)
获得剩余的时间
[root@web03 ~]# curl -vL https://www.baidu.com |& grep 'expire date'
* expire date: Aug 06 05:16:01 2023 GMT
[root@web03 ~]# curl -vL https://www.baidu.com |& grep 'expire date'|awk -F ': ' '{print $2}'
温馨提示:
| 只传输正确输出
|& 表示把管道前面标准输出(正确)和标准错误输出 都传递给后面的命令.
[root@web03 ~]# vim /server/scripts/check_ssl.sh
#!/bin/bash
#author:wh
#desc:检查证书的到期时间
url=https://www.baidu.com
#获取过期时间
expire_date=`curl -vL ${url} |& grep 'expire date'|awk -F ': ' '{print $2}'`
#格式化过期时间
expire_date_day=`date -d "${expire_date}" +%F`
#过期时间装换为秒
expire_date_second=`date -d "${expire_date}" +%s`
#现在的时间装换为秒
date_now_second=`date +%s`
#过期的时间
expire_days=`echo "(${expire_date_second}-${date_now_second})/60/60/24" |bc`
echo "网站${url}过期时间是:${expire_date_day}"
echo "网站${url}证书过期倒计时:${expire_days}天"
总结
https协议时由SSL+HTTP协议构建的可进行加密传输、身份验证的网络协议,比HTTP协议安全,可防止数据在传输过程中被窃取、修改,确保数据的完整性。端口时443。需要用到CA申请证书且需要一定费用。
(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
https的缺点:
SSL证书是收费的,而且功能越强的证书越贵
SSL会延长页面的加载时间,协议握手阶段耗时,有统计延长大概50%
https在缓存方面不如http
https会占用更多服务器的连接资源
https在面对黑客攻击、Dos拒绝服务攻击等方面也没啥作用
- 点赞
- 收藏
- 关注作者
评论(0)