nginx(六十七)http_ssl模块 client与nginx的ssl握手

news2025/7/14 15:30:08

一   HTTPS握手机制

关注点: 'SSL/TLS握手'的细节与nginx'配置指令'的关系

核心: 讲解'客户端(下游)'与作为'server'端的nginx之间的'握手'

最佳实践: 建议在'http块'中通过'include ssl.conf'把共工部分抽离处理

'ssl/tls报错'原因:可能是'客户端'或'服务端(openssl库处理)'的原因 

案例: '单向'和'双向认证'怎么配置?

①  ngx_http_ssl_module模块

(1)HTTPS单向认证涉及的指令 

②   ssl

解读: 让'nginx'支持'https'

 高版本使用ssl指令提示信息 

新版本推荐listen指令 

1) 'http1.2' --> listen 443 ssl http2 

2) 'http1.1' --> listen 443 ssl

③  ssl_certificate

说明: 配置'数字证书',一般是'代理CA'颁发的数字证书

了解: '数字证书'的内容 -->'服务端的公钥'、'证书的有效期'、'证书的颁发机构'等

补充:  了解证书的'格式' --> 常见是'pem、crt、p12'

附加1: 了解'nginx版本'与'openssl版本'的适配问题、'nginx高版本'支持'变量形式'

附加2: file的'相对(nginx.conf所在的路径)'和'绝对'路径

将中间CA的证书合并到主证书中

④  ssl_certificate_key

说明: 一般是'CA机构'颁发的'私钥文件','不能'泄露

注意: 文件'权限',保证'nginx的master进程'能够读取

补充: 私钥是'解用公钥加密的对称(会话)密钥'的,进而通过'会话密钥'来解'加密的data数据'

⑤  ssl_ciphers

常见'报错'场景: 浏览器支持的加密套件'nginx并没有'配置,,所以握手失败

细节:多个算法用':'分隔,'ALL'表示全部算法,'!'表示'不启用'该算法,'+'将该算法排到最后面去

1)不同'ssl/tls'版本支持的'加密套件'不同,'加密套件的安全性'也不同

2)加密套件一般'由多个'组成,在'双方协商'的'时候'会选取'server端'匹配上的'第一个'加密套件

 默认值的含义、官网参考

 openssl ciphers使用案例

 浏览器支持的加密套件 nginx并没有配置 所以握手失败,导致SSL握手报错

⑥  ssl_password_file

1)如果'私钥'之前加密过,需要指定'私钥'的解密'密码';如果没有'加密',则不需要配置该指令

   备注:为了'自动(非交互)'的执行

2)解'私钥'的密码不建议是'明文'的

3)建议在'reload'的时候通过工具'动态生成'的

4)细节点:如果'所有域名证书的私钥'密码都一样,建议在'http块'配置;个性化的话在'server'配置

备注: 一般在'ssl'目录下放置'crt、passwd、key'后缀文件,前缀为'域名'

nginx多个server怎么配置ssl_nginx多密码SSL证书管理

  

⑦  ssl_protocols

1)ssl_protocols'不具有兼容性',要支持'多个协议'需要'全部'写上

  举例: 如果'client'说自己支持'TLSv1.2',但是'nginx'没有配置'TLSv1.2'则'协商不通过'

2)支持的'加密套件'也与'ssl/tls'版本有关

3)如何支持'TLSv1.3'? -->'nginx和openssl'的版本

备注: 主流的是'TLSv1.2'

说明: TLS v1.0'以上'的版本是比较'安全'的,最好是'弃用SSLv3以下'的版本


 

(2)HTTPS双向认证的指令

双向认证中'server到client'认证目的: 服务端只允许'特定的客户'才能访问

场景: 一般'client证书'是由'自定的CA证书'签发的

①   ssl_verify_client

作用: 检验'client端'证书,是一个'开关'选项

特点: 常用'on'代表'强制'启用客户端认证;非法客户端'无证书、证书不可信'都会返回'400'

细节: 如果是'浏览器'必须提前导入'证书'、如果是'命令行工具(curl)'携带参数

curl命令进行单向和双向认证 

浏览器如何导入客户端证书

②   ssl_trusted_certificate

③   ssl_verify_depth

解读: 

  1)验证'客户端证书'的'有效性和合法性','目标是'需要层层'回溯到CA根证书'

  2)但是回溯'多少次'由ssl_verify_depth决定

细节

  1)当'ssl_verify_depth 1'时,回溯层数为0,即'任何中间证书'都不会通过验证,除非是'根'证书

  2)如果'中间证书的深度'要'小于'ssl_verify_depth的值,才会'验证'通过

ssl_verify_depth 

④   ssl_client_certificate

1)ssl_client_certificate就是'客户端证书的CA证书'了,代表'此CA签发'的证书都是'可信'的

+++++++ 'ssl_trusted_certificate' 和 'ssl_client_certificate'对比 +++++++

 1)这两个配置'效果都是一样'的

 2)唯一的'区别'是 ssl_client_certificate 会将'信任的 CA 列表'发送给'客户端'

 3)二者是'效率'和'安全性'的对比

 4)'ssl_client_certificate'优先级更高

备注1: 客户端如果'有很多证书',让客户端'一个一个去尝试'哪一个能建连是没有'意义并且很浪费'的

备注2: 'ssl_trusted_certificate'更安全,避免了'CA根证书'的泄露

⑤  ssl_crl 

特别注意ssl_crl这个配置,代表Nginx会读取一个CRL(Certificate Revoke List)文件,之前说过,可能会有收回用户权限的需求,因此我们必须有吊销证书的功能,产生一个CRL文件让Nginx知道哪些证书被吊销了即可。

注意: Nginx配置都是静态的,读取配置文件之后都会加载到内存中,即使文件内容变化也不会重新读取。因此当CRL文件发生变更之后,Nginx并不能意识到有新的证书被吊销了,所以必须使用reload指令让Nginx重新读取配置文件: service nginx reload或nginx -s reload

(3)TLS/SSL优化握手性能 

①  ssl_session_cache

作用: 开启了TLS'缓存复用'

机制: 在缓存中查找对应的'Session ID',如果存在则'接受并恢复'会话,返回'相同'的Session ID

优化的地方: 减少'TLS'握手,少了一次'RTT'的往返时间

nginx开启SSL会话复用,能提升多少性能?

②  ssl_session_timeout

③  ssl_session_tickets  ssl_session_ticket_key

说明: 使用'会话票证'tickets复用session

 (4)不太常用的指令

①  ssl_reject_handshake

1)自 '1.19.4 起',nginx 支持 ssl_reject_handshake 参数

2)设置为'on',当客户端'传过来的SNI'与'已配置的 server name'都不匹配时,会'拒绝' SSL 握手

3)访问'客户端(浏览器)'会报 SSL_ERROR_UNRECOGNIZED_NAME_ALERT

应用场景  nginx设置严格域名校验

②  ssl_prefer_server_ciphers

1)ssl_prefer_server_ciphers 'on|off' 作用, 是否'由服务器决定'采用'哪种'加密算法

2)如果ssl协议'支持tlsv1 tls1.1'这种'老'协议,设置为 'on' ,并配合ssl_ciphers使用

3)如果ssl协议'只支持tlsv1.2 tlsv1.3''新'协议,设置为 off ,因为新协议'不再采纳'此参数

4)当为on时,在使用'SSLv3和TLS协议'时,服务器加密算法将'优于'客户端加密算法

③  ssl_crl

常见: 有人'泄露'证书的私钥,'CA机构会吊销证书',使证书在'到期日期之前'无效

生效: 'reload | restart'才能让nginx'重新加载CRL',这样'被吊销的证书'将无法访问网站了

SSL证书吊销列表 CRL

④  ssl_buffer_size

⑤  ssl_conf_command

SSL_CONF_cmd查找

⑥  ssl_ocsp    ssl_ocsp_cache    ssl_ocsp_responder

说明: '了解'即可

什么是OCSP  OCSP的调试

⑦  ssl_stapling  ssl_stapling_file  ssl_stapling_responder  ssl_stapling_verify

OCSP stapling配置

⑧  ssl_early_data

说明: 是'TLSv1.3'的特性

⑨  ssl_ecdh_curve

 ⑩  HSTS强制浏览器使用https

(5)ssl模块提供的ssl/tls握手相关变量

(6)案例讲解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/38809.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter高仿微信-第56篇-搜索好友

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图: 实现代码: /*** Author : wangning* Email : maoning20080809163.co…

Java---Stream流详解

目录​​​​​​​ 一、Stream流详解 二、Stream流的获取 (1)单列集合 (2)双列集合 (3)数组 (4)一些零散数据 三、Stream流中常用的API方法 (1)中间…

含可再生能源的热电联供型微网经济运行优化_粒子群PSO算法_matlab程序

含可再生能源的热电联供型微网经济运行优化matlab程序 参考文献:含可再生能源的热电联供型微网经济运行优化 热电联供系统具有节能! 环保! 经济等特点" 有着良好的发展前景和应用价值# 文中针对由 风电机组! 光伏电池! 燃料电池! 余热锅炉! 燃气锅炉! 蓄电池以…

含电热联合系统的微电网运行优化附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

SpringBoot+Vue项目投稿和稿件处理系统

文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue.js 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat JD…

MYSQL中的锁

全局锁 就是对整个数据库进行加锁,加锁之后整个数据库就处于只读状态,后续的DML写语句,DDL语句,以及对更新事务的提交操作都会被阻塞,典型地使用场景就是做整个数据库的逻辑备份,对所有的表进行锁定&#x…

非凡社群管理之如何高效的进行社群管理

一、初始成员的严格筛选 我们建立社群初期,就要严格筛选初始会员,争取让我们找到的第一批种子用户,就是有着共同的连接点。而不是找到一群人之后,再去培养大家的同好。这样不仅吃力不讨好,往往效果也不太高&#xf…

Kafka系列之:实现Kafka Connect集群访问认证

Kafka系列之:实现Kafka Connect集群访问认证 一、Kafka Connect访问控制二、Kafka Connect技术知识三、详细介绍Kafka connect访问认证实现过程四、启动Kafka Connect集群五、测试Kafka Connect集群访问认证一、Kafka Connect访问控制 实现的效果如下所示: 错误的用户名和密…

nginx降权及匹配php

1.nginx降权 1.1 capabilities的介绍与运用 1.2 用普通用户启动nginx 1.3 root用户权限赋予 1.4 查看普通用户的nginx权限 1.5 查看nginx的欢迎网页 2.nginx与php的相互匹配 2.1 安装php及php-fpm包 2.2 检查php-fpm服务运行状态 2.3 php-fpm上的配置 2.4 nginx上的配…

基于matlab的精馏塔作业模拟仿真

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 原料物性表如下: 表3-1原料物理性质表 组分 质量流率 质量分数 摩尔流率 摩尔分数 分子量 常压沸点 丙烷 472.938 7.567…

SpringBoot SpringBoot 原理篇 1 自动配置 1.9 bean 的加载方式【七】

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇1 自动配置1.9 bean 的加载方式【七】1.9.1 ImportBeanDefinitionRegistrar1 …

mysql 到底是 join性能好,还是in一下更快呢

先总结: 数据量小的时候,用join更划算数据量大的时候,join的成本更高,但相对来说join的速度会更快数据量过大的时候,in的数据量过多,会有无法执行SQL的问题,待解决 事情是这样的,去…

浅谈Spring Cloud Gateway源码

本文不谈Spring Cloud Gateway相关的使用,仅梳理在微服务项目中,在使用Spring Cloud Gateway做为服务网关后,接收到请求后的大体执行流程。 文章目录大致流程图具体流程一、DispatcherHandler二、getHandler1、getHandlerInternal2、lookupRo…

【GlobalMapper精品教程】027:路径剖面和和视线工具的使用

文章目录 一、路径剖面简介二、创建剖面图1. 加载DEM2. 创建剖面图3. 计算填挖方3. 保存剖面图一、路径剖面简介 路径剖面视线工具允许您使用加载的高程数据集沿用户指定的路径获取垂直剖面。 要定义生成3D路径剖面所遵循的路径,只需单击鼠标左键选择路径的点,然后石键单击…

[acwing周赛复盘] 第 60 场周赛20220716

[acwing周赛复盘] 第 60 场周赛20220716 一、本周周赛总结二、 4722. 数列元素1. 题目描述2. 思路分析3. 代码实现三、4723. 队列1. 题目描述2. 思路分析3. 代码实现四、4724. 靓号1. 题目描述2. 思路分析3. 代码实现六、参考链接一、本周周赛总结 第一次打acwing,…

POJ1007:DNA排序

一、Description One measure of unsortedness in a sequence is the number of pairs of entries that are out of order with respect to each other. For instance, in the letter sequence DAABEC’‘, this measure is 5, since D is greater than four letters to its ri…

傻白入门芯片设计,典型的2D/2D+/2.5D/3D封装技术(六)

集成电路终于成为了一级学科,对集成电路领域的投入也日益加大,集成电路属于电子集成技术的一种,那么,现在的电子集成技术发展到了什么程度呢? 先进的电子集成技术可以在不到芝麻粒大小的1平方毫米内集成1亿只以上的晶体…

Tableau 合集3:格式设置之可视化图显示百分比和提示工具对齐问题

一、前言 本文通过可视化图中显示不了百分比和提示工具无法对齐两个小问题出发,介绍了关于Tableau设置格式和工具提示的一些使用方法。 环境:Windows11 64位、Tableau desktop 2021.2 二、问题1:可视化图中显示不了百分比 问题描述&#…

springboot整合其它项目(连接池和监控)

目录 一、整合Druid 1. Druid是什么? 2.如何在Spring Boot中集成Druid连接池和监控? 二、整合Redis 1.集成redis之非注解式开发 2.集成redis之注解缓存开发 一、整合Druid 1. Druid是什么? Druid是Java语言中最好的数据库连接池。…

paddleocr识别模型训练记录

准备数据集 自己新建目录 下载识别预训练模型 下载之后是一个压缩包,解压后(注意:rec是自己新建的目录) 修改配置文件 修改内容: 1.训练后模型存储目录; 2.是否训练可视化; 3.训练数据集图…