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 chain
 0 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=07969287
 1 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc.
     /OU=http://certificates.godaddy.com/repository
     /CN=Go Daddy Secure Certification Authority
     /serialNumber=07969287
   i:/C=US/O=The Go Daddy Group, Inc.
     /OU=Go Daddy Class 2 Certification Authority
 2 s:/C=US/O=The Go Daddy Group, Inc.
     /OU=Go Daddy Class 2 Certification Authority
   i:/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教程 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VidSketch:具有扩散控制的手绘草图驱动视频生成

浙大提出的VidSketch是第一个能够仅通过任意数量的手绘草图和简单的文本提示来生成高质量视频动画的应用程序。该方法训练是在单个 RTX4090 GPU 上进行的,针对每个动作类别使用一个小型、高质量的数据集。VidSketch方法使所有用户都能使用简洁的文本提示和直观的手绘…

STM32——HAL库开发笔记23(定时器4—输入捕获)(参考来源:b站铁头山羊)

定时器有四个通道,这些通道既可以用来作为输入,又可以作为输出。做输入的时候,可以使用定时器对外部输入的信号的时间参数进行测量;做输出的时候,可以使用定时器向外输出精确定时的方波信号。 一、输入捕获 的基本原理…

Jquery详解

一.Jquery介绍 1.jQuery 是一个快速、简洁的 JavaScript 库,它极大地简化了 HTML 文档遍历、事件处理、动画效果和 AJAX 交互等操作,使开发者能够更轻松地创建动态和交互性强的网页。对原生js的封装,提供了很多时间,调用Api即可,并且对浏览器做了兼容性…

【EB-06】SystemCreator dbc转arxml

SystemCreator dbc转arxml 1. SystemCreator 意义2. SystemCreator使用方法2.1 实现步骤2.2 参考官方文档方法1. SystemCreator 意义 EB Tresos 对dbc直接导入的支持不是很完善,dbc也不是AUTOSAR标准的数据库文件,EB建议所有通信矩阵通过ARXML交互比较合理(AUTOSAR定义的)…

LeetCode225.用队列实现栈

LeetCode225.用队列实现栈 文章目录 LeetCode225.用队列实现栈题目描述实现1:实现2: 题目描述 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack…

【Linux】vim 设置

【Linux】vim 设置 零、起因 刚学Linux,有时候会重装Linux系统,然后默认的vi不太好用,需要进行一些设置,本文简述如何配置一个好用的vim。 壹、软件安装 sudo apt-get install vim贰、配置路径 对所有用户生效: …

【FL0091】基于SSM和微信小程序的社区二手物品交易小程序

🧑‍💻博主介绍🧑‍💻 全网粉丝10W,CSDN全栈领域优质创作者,博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战,以及程序定制化开发…

Javaweb后端数据库多表关系一对多,外键,一对一

多表关系 一对多 多的表里,要有一表里的主键 外键 多的表上,添加外键 一对一 多对多 案例

seacmsv9注入管理员账号密码+orderby+limit

seacmsv9注入管理员账号密码 seacms介绍 海洋影视管理系统(seacms,海洋cms)是一套专为不同需求的站长而设计的视频点播系统,采用的是 php5.Xmysql 的架构,使用 fofa 搜索可以看到存在 400的记录: 因为sea…

开源基准测试模拟器:BlueROV2 水下机器人的控制(更改Z方向控制器)

开源基准测试模拟器:BlueROV2 水下机器人的控制(更改Z方向控制器) 将原有项目的z方向控制器由自适应滑膜控制器(ASMC)更改为自抗扰控制器(ADRC) 原Z控制器 更改为ADRC后图像 原自适应滑膜控制器代码 function u =

【苍穹外卖】问题笔记

【DAY1 】 1.VCS找不到 好吧,发现没安git 接着发现安全模式有问题,点开代码信任此项目 2.导入初始文件,全员爆红 好像没maven,配一个 并在设置里设置好maven 3.启用注解,见新手苍穹 pom.xml改lombok版本为1.1…

项目实践 之 pdf简历的解析和填充(若依+vue3)

文章目录 环境背景最终效果前端讲解左侧模块解析右侧上传模块解析前端步骤 后端讲解代码前端 环境背景 若依前后端分离框架 vue最后边附有代码哦 最终效果 前端讲解 左侧模块解析 1、左侧表单使用el-form 注意: 1、prop出现的字段,需要保证是该类所…

Web自动化之Selenium控制已经打开的浏览器(Chrome,Edge)

在使用selenium进行web自动化或爬虫的时候,经常会面临登录的情况,对于这种情况,我们可以利用Selenium控制已经打开的浏览器,从而避免每次都需要重新打开浏览器并进行登录的繁琐步骤。 目录 说明 启动浏览器 注意 --user-data-dir说明 代码设定 代码 改进代…

千峰React:案例一

做这个案例捏 因为需要用到样式,所以创建一个样式文件: //29_实战.module.css .active{text-decoration:line-through } 然后创建jsx文件,修改main文件:导入Todos,写入Todos组件 import { StrictMode } from react …

自动驾驶FSD技术的核心算法与软件实现

引言:FSD技术的定义与发展背景 在当今快速发展的科技领域中,自动驾驶技术已经成为全球关注的焦点之一。其中,“FSD”(Full Self-Driving,全自动驾驶)代表了这一领域的最高目标——让车辆在无需人类干预的情…

Go红队开发—并发编程

文章目录 并发编程go协程chan通道无缓冲通道有缓冲通道创建⽆缓冲和缓冲通道 等协程sync.WaitGroup同步Runtime包Gosched()Goexit() 区别 同步变量sync.Mutex互斥锁atomic原子变量 SelectTicker定时器控制并发数量核心机制 并发编程阶段练习重要的细节端口扫描股票监控 并发编程…

【嵌入式原理设计】实验六:倒车控制设计

目录 一、实验目的 二、实验环境 三、实验内容 四、实验记录及处理 五、实验小结 六、成果文件提取链接 一、实验目的 熟悉和掌握各模块联合控制的工作方式 二、实验环境 Win10ESP32实验开发板 三、实验内容 1、用串口和OLED显示当前小车与障碍物的距离值&#xff1b…

探索浮点数在内存中的存储(附带快速计算补码转十进制)

目录 一、浮点数在内存中的存储 1、常见的浮点数: 2、浮点数存储规则: 3、内存中无法精确存储: 4、移码与指数位E: 5、指数E的三种情况: 二、快速计算补码转十进制 1、第一种方法讨论: 2、第二种方…

实体机器人识别虚拟环境中障碍物

之前的内容已经实现了虚拟机器人识别实体机器人的功能,接下来就是实体机器人如何识别虚拟环境中的障碍物(包括虚拟环境中的障碍物和其他虚拟机器人)。 我做的是基于雷达的,所以主要要处理的是雷达的scan话题 我的虚拟机器人命名…

湖北中医药大学谱度众合(武汉)生命科技有限公司研究生工作站揭牌

2025年2月11日,湖北中医药大学&谱度众合(武汉)生命科技有限公司研究生工作站揭牌仪式在武汉生物技术研究院一楼101会议室举行,湖北中医药大学研究生院院长刘娅教授、基础医学院院长孔明望教授、基础医学院赵敏教授、基础医学院…