HTTPS基本概述
PKI
数据保密性
数据完整性
身份认证及授权
不可抵赖性
SSL
安全套接层
认证用户和服务器,确保数据发送到正确的客户机和服务器
加密数据以防止数据中途被窃取
维护数据的完整性,确保数据在传输过程中不被改变
HTTPS
使用SSL来实现安全的通信
证书
证书用于保证密钥的合法性
证书的主体可以是用户、计算机、服务等
证书格式遵循X.509标准
数字证书包含以下信息:
使用者的公钥值
使用者标识信息(如名称和电子邮件地址)
有效期(证书的有效时间)
颁发者标识信息
颁发者数字签名
数字证书由权威公正的第三方机构即CA签发
配置HTTPS前预备知识
专业版OV型证书 不显示企业名称
高级版EV型证书 显示企业名称
HTTPS证书购买选择
保护1个域名 www
保护5个域名 www images cdn test m
通配符域名 *.xiao.com
HTTPS注意事项
HTTPS不支持三级域名解析
HTTPS不支持续费,证书到期需重新申请进行替换
HTTPS显示绿色,说明整个网站的URL都是https的
HTTPS显示黄色,因为网站代码中包含http的不安全连接
HTTPS显示红色,证书是假的或过期了
HTTPS证书申请
仅限在在虚拟机上,无法在公网中使用
在公有云中,这个步骤省略
配置苹果要求的证书
1.服务器所有连接使用TLS1.2以上版本(openssl 1.0.2) 2.HTTPS帧数必须使用SHA256以上哈希算法签名 3.HTTPS帧数必须使用RSA 2048位或者ECC256位以上公钥算法 4.使用前向加密技术
密钥生成操作步骤
1.生成key密钥 2.生成证书签名请求文件(csr文件) 3.生成证书签名文件(CA文件)
实验步骤
1.检查当前环境
//openssl必须是1.0.2 [root@web01 ~]# openssl version OpenSSL 1.0.2k-fips 26 Jan 2017 //nginx必须有ssl模块 [root@web01 ~]# nginx -V --with-http_ssl_module //创建目录并进入 [root@web01 ~]# mkdir -p /etc/nginx/ssl_key [root@web01 ~]# cd /etc/nginx/ssl_key/
2.实验openssl充当CA权威机构创建私钥(生产不可能使用此方式生成证书,不被互联网CA权威承认的黑户证书)
[root@web01 ssl_key]# openssl genrsa -idea -out server.key 2048 Generating RSA private key, 2048 bit long modulus ...........................................................+++ ......+++ e is 65537 (0x10001) //记住配置密码,我这里是1234 Enter pass phrase for server.key: Verifying - Enter pass phrase for server.key:
3.生成自签证书,同时去掉私钥的密码
[root@web01 ssl_key]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:BJ Locality Name (eg, city) [Default City]:CP Organization Name (eg, company) [Default Company Ltd]:xiao Organizational Unit Name (eg, section) []:edu Common Name (eg, your name or your server's hostname) []:xiao Email Address []:tf@qq.com # req -->用于创建新的证书 # new -->表示创建的是新证书 # x509 -->表示定义证书的格式为标准格式 # key -->表示调用的私钥文件信息 # out -->表示输出证书文件信息 # days -->表示证书的有效期
HTTPS配置场景
1.HTTPS配置语法
1.15版本以上 server { listen 80; listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key; ... } Syntax: ssl_certificate file; Default: — Context: http, server Syntax: ssl_certificate_key file; Default: — Context: http, server
2.配置Nginx支持https实例
vim ssl.conf server { listen 443 ssl; server_name http.xiao.com; ssl_certificate ssl_key/server.crt; ssl_certificate_key ssl_key/server.key; location / { root /code/https; index index.html; } }
3.创建目录及页面文件
[root@web01 conf.d]# mkdir -p /code/https [root@web01 conf.d]# echo http >/code/https/index.html
4.检查语法重启服务
nginx -t
systemctl restart nginx
5.修改host
6.验证https://http.xiao.com
7.http://http.xiao.com的跳转,在配置文件加上如下
server { listen 80; server_name http.xiao.com; #rewrite .* https://$server_name$request_uri redirect; #rewrite .* https://$host$request_uri redirect; rewrite (.*) https://$server_name$1 redirect; }
8.http://xiao.com的跳转,在配置文件加上如下:
server { listen 80; server_name http.xiao.com; #rewrite .* https://http.xiao.com$request_uri redirect; #rewrite .* https://http.xiao.com$request_uri redirect; rewrite (.*) https://http.xiao.com$1 redirect; }
通过LB实现HTTPS
1)环境准备
角色 外网IP(NAT) 内网IP(LAN) 服务 lb01 eth:10.0.1.5 172.16.1.5 nginx-proxy web01 eth:10.0.1.7 172.16.1.7 nginx-web01 web02 eth:10.0.1.8 172.16.1.8 nginx-web02
2)先配置后端的所有web节点,如下操作,统一配置
//生成证书(仅生成一次即可,其他机器拷贝) [root@web01 ~]# mkdir -p /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 //配置后端节点通过https方式访问,如果该节点不直接对用访问提供服务,则不需要启动http端口 vim ssl.conf server { listen 443 ssl; server_name http.xiao.com; ssl_certificate ssl_key/server.crt; ssl_certificate_key ssl_key/server.key; location / { root /code/https; index index.html; } }
3)配置第二台web节点
scp -rp /etc/nginx/ssl_key/ root@172.16.1.8:/etc/nginx/ scp -rp /etc/nginx/conf.d/ root@172.16.1.8:/etc/nginx/
4)重启两台后端web节点
systemc restart nginx
5)拷贝web上的ssl证书至proxy
scp -rp /etc/nginx/ssl_key/ root@172.16.1.5:/etc/nginx/
6)配置Nginx负载均衡调度
# 必须修改后端监听资源池为443端口 upstream site { server 172.16.1.7:443 max_fails=1 fail_timeout=60s; server 172.16.1.8:443 max_fails=1 fail_timeout=60s; } # 接受用户http请求跳转至https server { listen 443 ssl; server_name http.xiao.com; ssl_certificate ssl_key/server.crt; ssl_certificate_key ssl_key/server.key; location / { proxy_pass https://site; include proxy_params; } } # 用户通过http请求跳转至https server { listen 80; server_name http.xiao.com; return 302 https://$server_name/$request_uri; }
7)重启proxy nginx
systemctl restart nginx