https://developer.aliyun.com/article/885650?spm=a2c6h.24874632.expert-profile.306.7c46cfe9h5DxWK
简介: Nginx-https 1.https基本概述 1.1.SSL主要功能 安全套接层 认证用户和服务器,确保数据发送到正确的客户机和服务器 加密数据以防止数据中途被窃取 维护数据的完整性,确保数据在传输过程中不被改变

Nginx-https

1.https基本概述

1.1.SSL主要功能

安全套接层

认证用户和服务器,确保数据发送到正确的客户机和服务器

加密数据以防止数据中途被窃取

维护数据的完整性,确保数据在传输过程中不被改变

HTTPS: 使用SSL来实现安全的通信

1.2.证书的概念

证书用于保证密钥的合法性

证书的主体可以是用户、计算机、服务等

证书格式遵循X.509标准

证书颁发流程

由运维人员将相关材料交给RA机构,再由RA机构将材料进行汇总交给CA机构,CA机构确认材料没有问题后,加紧证书交给RA机构,RA在交给运维人员

1.3.数字证书包含信息

  • 使用者的公钥值
  • 使用者的公钥值
  • 使用者标识信息(如名称和电子邮件)
  • 有效期
  • 颁发者表示信息
  • 颁发者的数字签名
  • 数字证书由权威公正的第三方机构即CA签发

1.4.PKI(公钥基础设施)

  • 一对密钥(私钥和公钥)
  • 公钥即所有人都可以获取而私钥只有个人可以用于,公钥也可以相当于一把锁子,而私钥相当于一把钥匙
  • 公钥加密,私钥解密,这是数据加密的原理
  • 私钥加密,公钥解密,这是数字签名的原理

1.5.PKI的作用

保密性:如何保证电子商户中涉及的大量保密信息在公开网络的传输过程中不被窃取;

完整性:如何保证电子商务中所传输的交易信息不被中途篡改及通过重复发送进行虚假交易(如我在银行取了一百万,结果跟银行说我没有取又想重新取一遍)

身份认证与授权:在电子商务的交易过程中,如何对双方进行认证,以保证交易双方身份的正确性

抗抵赖:在电子商务的交易完成后,如何保证交易的任何一方无法否认已发生的交易(如小明给小红发了一个电子邮件,其中小黄窃取了邮件内容,并进行篡改,再发送给小红,结果做了数字签名,小黄即使不承认也能有证据证明确实是他窃取了数据)

1.6.HTTPS证书的选择

  • 专业版OV型证书,不显示企业名称
  • 高级版EV型证书,显示企业名称

1.7.HTTPS证书购买选择

  • 保护一个域名www
  • 保护五个域名www images cdn test m
  • 通配符域名*.know.com
  • 一个正式只能为一个域名提供https

1.8.HTTPS注意事项

  • Https不支持三级域名解析
  • Https不支持续费,证书到期需要重新申请进行替换
  • Https显示绿色,说明整个网站的URL都是https的
  • Https显示黄色,因为网站代码中包含http的不安全连接
  • Https显示红色,证书是假的或过期了

2.https证书申请

2.1.配置苹果要求的证书

  • 服务器所有连接使用TLS1.2版本以上
  • HTTPS证书必须使用SHA246以上哈希算法前面
  • HTTPS证书必须使用RSA 2048位或ECC256位以上公钥算法
  • 使用前项加密技术

2.2.密钥生成操作步骤

  • 生成key密钥
  • 生成证书签名请求文件
  • 生成证书签名文件

2.3.申请证书文件

1.检查当前环境
[root@localhost nginx]# openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017 2.检查nginx是否有ssl模块
[root@localhost nginx]# nginx -V
--with-http_ssl_module 3.创建证书存放目录
[root@jxl ~]# mkdir -p /etc/nginx/ssl_key
[root@jxl ~]# cd /etc/nginx/ssl_key 4.使用openssl充当CA权威机构创建私钥,生产环境不能使用此方式生成证书,不被互联网CA认可
[root@localhost ssl_key]# openssl genrsa -idea -out know.key 2048
Generating RSA private key, 2048 bit long modulus
.................................................+++
.........+++
e is 65537 (0x10001)
Enter pass phrase for know.key: //输入认证密码
Verifying - Enter pass phrase for know.key: //再次输入密码 5.生成自签证书,同时去掉私钥密码
[root@jxl ssl_key]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout know.key -out know.crt
Generating a 2048 bit RSA private key
.........................................................................................+++
......................+++
writing new private key to 'know.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
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]:linux //单位
Organizational Unit Name (eg, section) []:edu //主机名
Common Name (eg, your name or your server's hostname) []:know.com //域名
Email Address []:jxl@know.com //邮箱 参数详解
req 用于创建新证书
newkey 表示创建的是新证书
x509 表示定义证书的格式是标准格式
keyout 表示调用的私钥文件信息
out 表示输出证书文件信息
days 表示证书的有效期

3.https具体配置

3.1.https配置语法

开启ssl

语法:ssl on|off;

默认:ssl off;

配置区域:http,server

指定证书文件路径

语法:ssl_certificate file;

默认:-

配置区域:http,server

指定私钥key文件路径

语法:ssl_certificate_key file;

默认:-

配置区域:http,server

3.2.https配置

1.编辑站点配置文件
[root@localhost conf.d]# vim https_know.conf
#https_know
server {
listen 443;
server_name edu.know.com;
ssl on;
ssl_certificate ssl_key/know.crt;
ssl_certificate_key ssl_key/know.key; location / {
root /web;
index index.html;
}
} 2.注意事项,如果在检测语法提示如下内容,不过也不影响使用
nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /etc/nginx/conf.d/https_know.conf:4
处理方法:
编辑配置文件将ssl on一行删除,修改listen一行为listen 443 ssl; 3.重载服务
[root@localhost conf.d]# nginx -t
[root@localhost conf.d]# systemctl reload nginx

3.3.https跳转1

通过访问http://edu.know.com跳转至https://edu.know.com

实现思路:

由于http是默认监听80端口,因此我们在定义一个server用来监听80端口,然后定义一个rewrite即可

实现方式1.
server {
listen 443 ssl;
server_name edu.know.com;
ssl_certificate ssl_key/know.crt;
ssl_certificate_key ssl_key/know.key; location / {
root /web/know;
index index.html;
}
} server {
listen 80;
server_name edu.know.com;
rewrite .* https://edu.know.com;
} 方式2
rewrite .* https://$server_name$request_uri; 方式3
rewrite .* https://$host$request_uri; 方式4
rewrite (.*) https://$server_name$1;

3.4.https跳转2

当访问know.com时跳转至https://edu.know.com

实现思路:定义一个server,server_name为know.com然后定义rewrite

[root@localhost conf.d]# vim https_know.conf
server {
listen 443 ssl;
server_name edu.know.com;
#ssl on;
ssl_certificate ssl_key/know.crt;
ssl_certificate_key ssl_key/know.key; location / {
root /web/know;
index index.html;
}
}
server {
listen 80;
server_name know.com;
rewrite (.*) https://edu.know.com;
}

4.多站点https配置

4.1.申请所有站点证书

1.shangmei.com
[root@localhost ~]# cd /etc/nginx/ssl_key/
[root@localhost ssl_key]# openssl genrsa -idea -out shangmei.key
[root@localhost ssl_key]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout shangmei.key -out shangmei.crt 2.know.com
[root@localhost ~]# cd /etc/nginx/ssl_key/
[root@localhost ssl_key]# openssl genrsa -idea -out know.key
[root@localhost ssl_key]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout know.key -out know.crt

4.2.配置站点文件

1.shangmei.com
[root@localhost conf.d]# cat https_shangmei.conf
#shangmei.com
server {
listen 443 ssl;
server_name gw.shangmei.com;
ssl_certificate ssl_key/shangmei.crt;
ssl_certificate_key ssl_key/shangmei.key; location / {
root /web/shangmei;
index index.html;
}
}
[root@localhost conf.d]# cat https_know.conf
#https_know
server {
listen 443 ssl;
server_name edu.know.com;
#ssl on;
ssl_certificate ssl_key/know.crt;
ssl_certificate_key ssl_key/know.key; location / {
root /web/know;
index index.html;
}
}

页面访问

4.4.配置rewrite

访问二级域名即可跳转至对应页面

shangmei.com
[root@localhost conf.d]# cat https_shangmei.conf
#shangmei.com
server {
listen 443 ssl;
server_name gw.shangmei.com;
ssl_certificate ssl_key/shangmei.crt;
ssl_certificate_key ssl_key/shangmei.key; location / {
root /web/shangmei;
index index.html;
}
} server {
listen 80;
server_name shangmei.com;
rewrite (.*) https://gw.shangmei.com$1;
} know.com
[root@localhost conf.d]# cat https_know.conf
#https_know
server {
listen 443 ssl;
server_name edu.know.com;
#ssl on;
ssl_certificate ssl_key/know.crt;
ssl_certificate_key ssl_key/know.key; location / {
root /web/know;
index index.html;
}
}
server {
listen 80;
server_name know.com;
rewrite (.*) https://edu.know.com;
}

5.负载均衡https跳转配置

5.1.环境配置5.2.配置web节点

web01
[root@jxl conf.d]# vim https_know.conf
#https_know
server {
listen 80;
server_name edu.know.com;
#ssl on;
#ssl_certificate ssl_key/know.crt;
#ssl_certificate_key ssl_key/know.key; location / {
root /web/know;
index index.html;
}
} web02
[root@localhost conf.d]# vim https_know.conf
#https_know
server {
listen 80;
server_name edu.know.com;
root /web/know;
index index.html;
} 节点测试
[root@localhost conf.d]# echo "127.0.0.1 edu.know.com" > /etc/hosts
[root@localhost conf.d]# curl edu.know.com | less

5.3.配置nginx负载均衡+https

1.开启rewrite日志
[root@localhost conf.d]# vim ../nginx.conf
http {
.....
error_log /var/log/nginx/error.log notice;
rewrite_log on;
.....
} 2.配置负载均衡
[root@localhost conf.d]# vim lb_https_know.conf
#lb_https_know
upstream lb_https_know {
server 192.168.81.220 weight=1 max_fails=3 fail_timeout=60s;
server 192.168.81.230 weight=1 max_fails=3 fail_timeout=60s;
}
server {
listen 443 ssl;
server_name edu.know.com;
ssl_certificate ssl_key/know.crt;
ssl_certificate_key ssl_key/know.key;
access_log /nginx_log/lb_edu_know_access.log main; location / {
proxy_pass http://lb_https_know;
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;
proxy_connect_timeout 60;
proxy_send_timeout 30;
proxy_read_timeout 30;
proxy_buffering on;
proxy_buffer_size 256k;
proxy_buffers 4 256k;
}
}

5.4.配置rewrite跳转

[root@localhost conf.d]# vim lb_https_know.conf
server {
listen 80;
server_name know.com;
rewrite (.*) https://edu.know.com$1;
}

配置文件最终配置

访问效果5.5.日志效果

访问日志错误日志—记录rewrite跳转6.总结

PKI

公钥基础设施

证书

加密算法

SSL

安全套接层

HTTPS

通过SSL传输数据

可以这样来说明这个原理:http和ssl结合升级为https,通过ssl加密传输数据,ssl是pki实现的一种方式,pki可以生成证书、加密算法,有两种算法:公加私解—数据加密,私家公解—数字签名

证书申请其实和身份证颁发的流程是一样的,首先由运维人员将相关材料交给RA机构,再由RA机构将材料进行汇总交给CA机构,CA机构确认材料没有问题后,加紧证书交给RA机构,RA在交给运维人员,而身份证颁发则是个人将自己的身份信息交给公安局,公安局在交给办证的机构,机构将身份证做完后发给公安局,公安局通知个人来取。

[转帖]Nginx-https证书认证详解的更多相关文章

  1. [转帖]Nginx安装及配置详解 From https://www.cnblogs.com/zhouxinfei/p/7862285.html

    Nginx安装及配置详解   nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP ...

  2. [转帖]Nginx rewrite模块深入浅出详解

    Nginx rewrite模块深入浅出详解 https://www.cnblogs.com/beyang/p/7832460.html rewrite模块(ngx_http_rewrite_modul ...

  3. [转帖]nginx服务器安装及配置文件详解

    nginx服务器安装及配置文件详解 http://seanlook.com/2015/05/17/nginx-install-and-config/  发表于 2015-05-17 |  更新于: 2 ...

  4. 2-4、nginx特性及基础概念-nginx web服务配置详解

    Nginx Nginx:engine X 调用了libevent:高性能的网络库 epoll():基于事件驱动event的网络库文件 Nginx的特性: 模块化设计.较好扩展性(不支持模块动态装卸载, ...

  5. 【第六课】Nginx常用配置下详解

    目录 Nginx常用配置下详解 1.Nginx虚拟主机 2.部署wordpress开源博客 3.部署discuz开源论坛 4.域名重定向 5.Nginx用户认证 6.Nginx访问日志配置 7.Ngi ...

  6. 【转】nginx服务器安装及配置文件详解

    原文:http://seanlook.com/2015/05/17/nginx-install-and-config/ nginx服务器安装及配置文件详解 nginx在工作中已经有好几个环境在使用了, ...

  7. Nginx安装及配置详解【转】

    nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...

  8. nginx入门与实战 安装 启动 配置nginx Nginx状态信息(status)配置 正向代理 反向代理 nginx语法之location详解

    nginx入门与实战 网站服务 想必我们大多数人都是通过访问网站而开始接触互联网的吧.我们平时访问的网站服务 就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务. Web ...

  9. Nginx简介及配置文件详解

    http://blog.csdn.net/hzsunshine/article/details/63687054 一 Nginx简介    Nginx是一款开源代码的高性能HTTP服务器和反向代理服务 ...

  10. nginx与fastdfs配置详解与坑

    nginx与fastdfs配置详解与坑 环境 ubantu19.04 fastdfs-5.11 fastdfs-nginx-module-1.20 libfastcommon-1.0.39 nginx ...

随机推荐

  1. 牛刀小试基本语法,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang基本语法和变量的使用EP02

    书接上回,Go lang1.18首个程序的运行犹如一声悠扬的长笛,标志着并发编程的Go lang巨轮正式开始起航.那么,在这艘巨轮之上,我们首先该做些什么呢?当然需要了解最基本的语法,那就是基础变量的 ...

  2. Java 插入Excel页眉、页脚

    前言 在Excel文档中,我们常用页眉页脚来显示文档的附加信息,例如日期.公司名称.Logo或作者信息等.本文将通过Java程序来介绍如何给Excel文档添加页眉页脚.代码示例主要从以下几方面来演示添 ...

  3. 鱼和熊掌兼得:C++代码在编译时完成白盒测试

    摘要:如果能够让代码在编译的时候,自动完成白盒测试,这不是天方夜谭. 白盒测试也叫开发者测试,是对特定代码函数或模块所进行的功能测试.当前主流的白盒测试方法是:先针对仿真或者生产环境编译出可执行文件, ...

  4. 什么是VXLAN?为什么需要VXLAN?

    摘要:本文介绍了什么是VXLAN,以及VXLAN的基本概念和工作原理,包括:为什么需要VXLAN?VXLAN与VLAN之间有啥不同?什么是VTEP?什么是VNI?VXLAN报文是如何封装的?VXLAN ...

  5. THOR:MindSpore 自研高阶优化器源码分析和实践应用

    摘要:这篇文章跟大家分享下THOR的实践应用.THOR算法的部分内容当前已经在MindSpore中开源 本文分享自华为云社区<MindSpore 自研高阶优化器源码分析和实践应用>,原文作 ...

  6. 详解CNN实现中文文本分类过程

    摘要:本文主要讲解CNN实现中文文本分类的过程,并与贝叶斯.决策树.逻辑回归.随机森林.KNN.SVM等分类算法进行对比. 本文分享自华为云社区<[Python人工智能] 二十一.Word2Ve ...

  7. 华为AppCube入选Forrester《中国低代码平台市场分析报告》

    摘要:知名研究与分析机构Forrester于11月11日发布<中国低代码平台市场分析报告(The State Of Low-Code Platforms In China)>,AppCub ...

  8. 火山引擎 DataTester:A/B 测试,让企业摆脱广告投放“乱烧钱”

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在广告投放的场景下,一线广告优化师通常会创建多个计划,去测试不同的广告素材效果.这套方法看似科学,实际上却存在诸多 ...

  9. SpringBoot 引用仓库中没有 第三方包 - 将jar 包安装本地 maven

    命令如下: mvn install:install-file -Dfile="D:\Projects\lib\com.ibm.mq-7.0.1.3.jar" -DgroupId=c ...

  10. Educational Codeforces Round 109 (Rated for Div. 2) 个人补题记录(A~D,AB思维,C模拟构造,D题DP)

    补题链接:Here 1525A. Potion-making (思维 [题意描述] 作为一个魔法师,现在我想配置一杯药物浓度为 \(k\%\) 的药水, 每次操作能进行添加: 一升水 一升药物精华 作 ...