nginx 配置https

参考文档:nginx 文档 -- nginx官网|nginx下载安装|nginx配置|nginx教程 

配置 HTTPS 服务器

HTTPS 服务器优化
SSL 证书链
单个 HTTP/HTTPS 服务器
基于名称的 HTTPS 服务器
具有多个名称
的 SSL 证书 服务器名称指示
兼容性

要配置 HTTPS 服务器,ssl参数 必须在 server 块中的侦听套接字上启用, 并且应指定服务器证书和私钥文件的位置:

server {listen              443 ssl;server_name         www.example.com;ssl_certificate     www.example.com.crt;ssl_certificate_key www.example.com.key;ssl_protocols       TLSv1.2 TLSv1.3;ssl_ciphers         HIGH:!aNULL:!MD5;...
}

服务器证书是一个公共实体。 它被发送到连接到服务器的每个客户端。 私钥是一个安全实体,应存储在文件中 受限访问,但是,它必须可由 nginx 的主进程读取。 私钥可以交替存储在与证书相同的文件中:

    ssl_certificate     www.example.com.cert;ssl_certificate_key www.example.com.cert;

在这种情况下,还应限制文件访问权限。 尽管证书和密钥存储在一个文件中, 仅将证书发送到客户端。

指令 ssl_protocols 和 ssl_ciphers 可用于限制连接 以仅包含 SSL/TLS 的强版本和密码。 默认情况下,nginx 使用 “ssl_protocols TLSv1.2 TLSv1.3” 和”ssl_ciphers HIGH:!aNULL:!MD5”, 因此,通常不需要显式配置它们。 请注意,这些指令的默认值已更改多次。

HTTPS 服务器优化

SSL作会消耗额外的 CPU 资源。 在多处理器系统上,应该运行多个工作进程, 不少于可用 CPU 内核数。 CPU 最密集的作是 SSL 握手。 有两种方法可以最大程度地减少每个客户端的这些作数: 第一种是通过启用 keepalive 连接来发送多个 请求通过一个连接,第二个连接是重用 SSL 会话 参数来避免并行和后续连接的 SSL 握手。 会话存储在 worker 之间共享的 SSL 会话缓存中 并由 ssl_session_cache 指令配置。 1 MB 的缓存包含大约 4000 个会话。 默认缓存超时为 5 分钟。 可以使用 ssl_session_timeout 指令来增加它。 以下是针对多核系统优化的配置示例 具有 10 MB 共享会话缓存:

worker_processes auto;http {ssl_session_cache   shared:SSL:10m;ssl_session_timeout 10m;server {listen              443 ssl;server_name         www.example.com;keepalive_timeout   70;ssl_certificate     www.example.com.crt;ssl_certificate_key www.example.com.key;ssl_protocols       TLSv1.2 TLSv1.3;ssl_ciphers         HIGH:!aNULL:!MD5;...

SSL 证书链

某些浏览器可能会抱怨由知名 证书颁发机构,而其他浏览器可能会接受该证书 没有问题。 发生这种情况是因为颁发机构已对服务器证书进行签名 使用证书中不存在的中间证书 分布式的已知可信证书颁发机构的基础 使用特定的浏览器。 在这种情况下,颁发机构会提供一组链式证书 该证书应连接到签名的服务器证书。 服务器证书必须出现在链式证书之前 在合并的文件中:

$ cat www.example.com.crt bundle.crt > www.example.com.chained.crt

生成的文件应在 ssl_certificate 指令中使用:

server {listen              443 ssl;server_name         www.example.com;ssl_certificate     www.example.com.chained.crt;ssl_certificate_key www.example.com.key;...
}

如果服务器证书和捆绑包在错误的 order 时,nginx 将无法启动并显示错误消息:

SSL_CTX_use_PrivateKey_file(" ... /www.example.com.key") failed(SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)

因为 nginx 尝试将私钥与 bundle 的 第一个证书,而不是服务器证书。

浏览器通常存储它们接收的中间证书 并且由受信任的机构签名,因此积极使用浏览器 可能已经拥有所需的中间证书,并且 不能抱怨发送的证书没有链式捆绑包。 为了确保服务器发送完整的证书链, 这openssl命令行实用程序,例如:

$ openssl s_client -connect www.godaddy.com:443
...
Certificate chain0 s:/C=US/ST=Arizona/L=Scottsdale/1.3.6.1.4.1.311.60.2.1.3=US/1.3.6.1.4.1.311.60.2.1.2=AZ/O=GoDaddy.com, Inc/OU=MIS Department/CN=www.GoDaddy.com/serialNumber=0796928-7/2.5.4.15=V1.0, Clause 5.(b)i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certificates.godaddy.com/repository/CN=Go Daddy Secure Certification Authority/serialNumber=079692871 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certificates.godaddy.com/repository/CN=Go Daddy Secure Certification Authority/serialNumber=07969287i:/C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority2 s:/C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authorityi:/L=ValiCert Validation Network/O=ValiCert, Inc./OU=ValiCert Class 2 Policy Validation Authority/CN=http://www.valicert.com//emailAddress=info@valicert.com
...

使用  SNI 测试配置时, 请务必指定 -servername选择 如 openssl默认情况下不使用 SNI。

在此示例中,www.GoDaddy.com服务器证书 #0 由颁发者签名 (“i”),它本身就是证书 #1 的主题, 它由颁发者签名,该颁发者本身就是证书 #2 的使用者, 它由知名颁发者 ValiCert, Inc. 签名,其证书存储在浏览器的内置 证书基础(位于 Jack 建造的房子里)。

如果尚未添加证书捆绑包,则仅添加服务器证书 #0 将显示。

单个 HTTP/HTTPS 服务器

可以配置一个服务器来处理 HTTP 和 HTTPS 请求:

server {listen              80;listen              443 ssl;server_name         www.example.com;ssl_certificate     www.example.com.crt;ssl_certificate_key www.example.com.key;...
}

在 0.7.14 之前,无法有选择地为 单独的侦听套接字,如上所示。 SSL 只能使用  ssl 指令为整个服务器启用 使得无法设置单个 HTTP/HTTPS 服务器。 这 ssl listen 指令的参数 已添加以解决该问题。  ssl 指令的使用 因此,不鼓励使用。

基于名称的 HTTPS 服务器

配置两个或多个 HTTPS 服务器时会出现一个常见问题 侦听单个 IP 地址:

server {listen          443 ssl;server_name     www.example.com;ssl_certificate www.example.com.crt;...
}server {listen          443 ssl;server_name     www.example.org;ssl_certificate www.example.org.crt;...
}

通过此配置,浏览器接收默认服务器的证书 即www.example.com无论请求的服务器名称如何。 这是由 SSL 协议行为引起的。 SSL 连接是在浏览器发送 HTTP 请求之前建立的 nginx 不知道请求的服务器的名称。 因此,它可能只提供默认服务器的证书。

解决问题的最古老、最可靠的方法 是为每个 HTTPS 服务器分配一个单独的 IP 地址:

server {listen          192.168.1.1:443 ssl;server_name     www.example.com;ssl_certificate www.example.com.crt;...
}server {listen          192.168.1.2:443 ssl;server_name     www.example.org;ssl_certificate www.example.org.crt;...
}

具有多个名称的 SSL 证书

还有其他方法允许共享单个 IP 地址 在多个 HTTPS 服务器之间。 但是,它们都有其缺点。 一种方法是使用具有多个名称的证书 SubjectAltName 证书字段,例如www.example.comwww.example.org. 但是,SubjectAltName 字段长度是有限的。

另一种方法是使用带有通配符名称的证书,例如*.example.org. 通配符证书保护指定域的所有子域, 但只是在一个层面上。 此证书匹配www.example.org,但不匹配example.orgwww.sub.example.org. 这两种方法也可以结合使用。 证书可以在 SubjectAltName 字段,例如example.org*.example.org.

最好放置一个具有多个名称的证书文件,并且 其私有密钥文件在 HTTP 配置级别 要在所有 服务器中继承其单个内存副本:

ssl_certificate     common.crt;
ssl_certificate_key common.key;server {listen          443 ssl;server_name     www.example.com;...
}server {listen          443 ssl;server_name     www.example.org;...
}

服务器名称指示

在单个 HTTPS 服务器上运行多个 HTTPS 服务器的更通用的解决方案 IP 地址为 TLS 服务器名称指示扩展(SNI、RFC 6066)、 它允许浏览器在 SSL 握手期间传递请求的服务器名称 因此,服务器将知道它应该使用哪个证书 对于连接。 SNI 目前大多数现代浏览器都支持,但某些旧客户端或特殊客户端可能不支持 SNI。

SNI 中只能传递域名, 但是,某些浏览器可能会错误地传递服务器的 IP 地址 作为其名称(如果请求包含文本 IP 地址)。 我们不应该依赖这个。

为了在 nginx 中使用 SNI,它必须在 构建 nginx 二进制文件时使用的 OpenSSL 库以及 在运行时动态链接到的库。 如果 OpenSSL 是使用配置选项 “--enable-tlsext” 构建的,则从 0.9.8f 版本开始支持 SNI。从 OpenSSL 0.9.8j 开始,此选项默认启用。 如果 nginx 是使用 SNI 支持构建的,那么 nginx 将显示此内容 当使用 “-V” 开关运行时:

$ nginx -V
...
TLS SNI support enabled
...

但是,如果启用了 SNI 的 nginx 动态链接到 一个不支持 SNI 的 OpenSSL 库,nginx 会显示警告:

nginx was built with SNI support, however, now it is linked
dynamically to an OpenSSL library which has no tlsext support,
therefore SNI is not available

兼容性

  • SNI 支持状态已由“-V”开关显示 自 0.8.21 和 0.7.62 起。
  • ssl从 0.7.14 开始支持 listen 指令的参数。 在 0.8.21 之前,它只能与default参数。
  • 从 0.5.23 开始支持 SNI。
  • 从 0.5.6 开始支持共享 SSL 会话缓存。

  • 版本 1.27.3 及更高版本:默认 SSL 协议为 TLSv1.2 和 TLSv1.3(如果 OpenSSL 库支持)。 否则,当使用 OpenSSL 1.0.0 或更早版本时, 默认 SSL 协议为 TLSv1 和 TLSv1.1。
  • 版本 1.23.4 及更高版本:默认 SSL 协议为 TLSv1, TLSv1.1、TLSv1.2 和 TLSv1.3(如果 OpenSSL 库支持)。
  • 版本 1.9.1 及更高版本:默认 SSL 协议为 TLSv1, TLSv1.1 和 TLSv1.2(如果 OpenSSL 库支持)。
  • 版本 0.7.65、0.8.19 及更高版本:默认 SSL 协议为 SSLv3、TLSv1、 TLSv1.1 和 TLSv1.2(如果 OpenSSL 库支持)。
  • 版本 0.7.64、0.8.18 及更早版本:默认 SSL 协议为 SSLv2、 SSLv3 和 TLSv1。

  • 版本 1.0.5 及更高版本:默认 SSL 密码为 “HIGH:!aNULL:!MD5”.
  • 版本 0.7.65、0.8.20 及更高版本:默认 SSL 密码为 “HIGH:!ADH:!MD5”.
  • 版本 0.8.19:默认的 SSL 密码是 “ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM”.
  • 版本 0.7.64、0.8.18 及更早版本:默认 SSL 密码为
    ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP”.

参考文档:nginx 文档 -- nginx官网|nginx下载安装|nginx配置|nginx教程 

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

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

相关文章

python-leetcode-乘积最大子数组

152. 乘积最大子数组 - 力扣&#xff08;LeetCode&#xff09; class Solution:def maxProduct(self, nums: List[int]) -> int:if not nums:return 0max_prod nums[0]min_prod nums[0]result nums[0]for i in range(1, len(nums)):if nums[i] < 0:max_prod, min_prod…

前端或者后端通常用到数组使用方式

第一个是:Array.from() 将具有length属性或者可迭代的对象转化为数组 Array.from(abcdef) // 返回值[a1, b1, c1, d1, e1, f1] Array.from(new Map([[b1, 1 ], [a1, 2 ]])) Array.from(new Set([ 1 , 2 , 3 ])) 第二个是:Array.reduce() 遍历数组,将函数的返回值,存储到累加器中…

最大子数组和力扣--53

目录 题目 思路 代码 题目 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1…

JavaScript 深浅拷贝全面解析

在 JavaScript 中&#xff0c;深浅拷贝是处理对象复制的重要概念。它们的核心区别在于对 引用类型数据 的处理方式&#xff0c;理解这一点对避免程序中的意外数据污染至关重要。 一、核心概念解析 1. 基本类型 vs 引用类型 基本类型&#xff1a;Number, String, Boolean, null…

【大模型】大模型推理能力深度剖析:从通用模型到专业优化

大模型推理能力深度剖析&#xff1a;从通用模型到专业优化 大模型推理能力深度剖析&#xff1a;从通用模型到专业优化一、通用语言模型与推理模型的区别&#xff08;一&#xff09;通用语言模型&#xff1a;多任务的“万金油”&#xff08;二&#xff09;推理模型&#xff1a;复…

RISC-V架构的平台级中断控制器(PLIC:platform-level interrupt controller)详解

英文缩写 英文缩写中文含义PLICplatform-level interrupt controller&#xff0c;平台级中断控制器SMTsimultaneous multi-threading&#xff0c;并发多线程HARTRISC-V架构中的硬件线程SMTsimultaneous multi-threading&#xff0c;多线程执行M-MODEmachine mode&#xff0c;机…

[Web 安全] PHP 反序列化漏洞 —— PHP 序列化 反序列化

关注这个专栏的其他相关笔记&#xff1a;[Web 安全] 反序列化漏洞 - 学习笔记-CSDN博客 0x01&#xff1a;PHP 序列化 — Serialize 序列化就是将对象的状态信息转化为可以存储或传输的形式的过程&#xff0c;在 PHP 中&#xff0c;通常使用 serialize() 函数来完成序列化的操作…

航空装配自动化神器Ethercat转profient网关搭配机器人精准控制

生产管理系统通过网关与装配机器人连接&#xff0c;加快航空器机身的装配速度&#xff0c;减少人为误差。 航空制造对装配线的精度和效率有着极高的要求。某航空制造厂使用的耐达讯Profinet转EtherCAT协议网关NY-PN-ECATM&#xff0c;将其生产管理系统与装配机器人连接&#xf…

什么是MySql的主从复制(主从同步)?

主页还有其他面试题总结&#xff0c;有需要的可以去看一下&#xff0c;喜欢的就留个三连再走吧~ 1.什么是MySql的主从复制原理&#xff1f; 主从复制的核心就是二进制binlog&#xff08;DDL&#xff08;数据定义语言&#xff09;语句和DML&#xff08;数据操纵语言&#xff09…

自然语言处理:初识自然语言处理

介绍 大家好&#xff0c;博主又来给大家分享知识了。从这次开始&#xff0c;博主给大家分享自然语言处理这个领域的内容。这也是博主非常感兴趣的研究领域。 最开始&#xff0c;博主计划在自然语言处理系列的第一篇博文中&#xff0c;和大家聊聊文本规范化这个话题。毕竟在自…

【保姆级视频教程(二)】YOLOv12训练数据集构建:标签格式转换-划分-YAML 配置 避坑指南 | 小白也能轻松玩转目标检测!

【2025全站首发】YOLOv12训练数据集构建&#xff1a;标签格式转换-划分-YAML 配置 避坑指南 | 小白也能轻松玩转目标检测&#xff01; 文章目录 1. 数据集准备1.1 标签格式转换1.2 数据集划分1.3 yaml配置文件创建 2. 训练验证 1. 数据集准备 示例数据集下载链接&#xff1a;P…

【人工智能】蓝耘智算平台盛大发布DeepSeek满血版:开创AI推理体验新纪元

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ 蓝耘智算平台 蓝耘智算平台核心技术与突破元生代推理引擎快速入门&#xff1a;三步调用大模型接口&#xff0c;OpenAI SDK无缝兼容实战用例文…

【网络编程】几个常用命令:ping / netstat / xargs / pidof / watch

ping&#xff1a;检测网络联通 1. ping 的基本功能2. ping 的工作原理3. ping 的常见用法4. ping 的输出解释5. ping 的应用场景6. 注意事项 netstat&#xff1a;查看网络状态 1. netstat 的基本功能2. 常见用法3. 示例4. 输出字段解释5. netstat 的替代工具6. 注意事项 xargs&…

【C++】:STL详解 —— list类

目录 list的概念 list的构造函数 list的大小 size() resize() empty() list的插入 push_front()和emplace_front() push_back()和emplace_back() insert()和emplace() list的删除 pop_front() pop_back() erase() remove() remove_if() unique() clear()…

【数据结构】(11) Map 和 Set

一、Map 和 Set 的简介 1、Set 和 Map Map 和 Set 是集合类框架学习的最后一部分。Map 和 Set 都是接口&#xff0c;需要通过 TreeSet、HashSet 和 TreeMap、HashMap 实例化。注意&#xff0c;Set 实现了 Collection&#xff0c;Map 并没有。 Set 存放的是键&#xff08;Key&a…

关于CanvasRenderer.SyncTransform触发调用的机制

1&#xff09;关于CanvasRenderer.SyncTransform触发调用的机制 2&#xff09;小游戏Spine裁剪掉帧问题 3&#xff09;Dedicated Server性能问题 4&#xff09;.mp4视频放入RT进行渲染的性能分析闭坑指南 这是第421篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题…

Kronecker分解(K-FAC):让自然梯度在深度学习中飞起来

Kronecker分解&#xff08;K-FAC&#xff09;&#xff1a;让自然梯度在深度学习中飞起来 在深度学习的优化中&#xff0c;自然梯度下降&#xff08;Natural Gradient Descent&#xff09;是一个强大的工具&#xff0c;它利用Fisher信息矩阵&#xff08;FIM&#xff09;调整梯度…

【HTML— 快速入门】HTML 基础

准备工作 vscode下载 百度网盘 Subline Text 下载 Sublime Text下载 百度网盘 vscode 下载 Sublime Text 是一款轻量好用的文本编辑器&#xff0c;我们在写前端代码时&#xff0c;使用 Sublime Text 打开比使用记事本打开&#xff0c;得到的代码体验更好&#xff0c;比 vscode…

鸿蒙开发深入浅出01(基本环境搭建、页面模板与TabBar)

鸿蒙开发深入浅出01&#xff08;基本环境搭建、页面模板与TabBar&#xff09; 1、效果展示2、下载 DevEco Studio3、创建项目4、新建页面模板5、更改应用信息6、新建以下页面7、Index.ets8、真机运行9、图片资源文件 1、效果展示 2、下载 DevEco Studio 访问官网根据自己的版本…

自动驾驶泊车算法详解(一)

自动驾驶泊车算法是自动驾驶技术中的重要组成部分&#xff0c;主要用于实现车辆在复杂场景下的自动泊车功能&#xff08;如垂直泊车、侧方位泊车、斜列泊车等&#xff09;。其核心目标是通过感知、规划和控制技术&#xff0c;使车辆在无人工干预的情况下安全、高效地完成泊车动…