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