讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在 Nginx 中配置特定的证书指纹白名单以实现严格的内部访问

陌敏姑娘_8010

陌敏姑娘_8010

发布时间:2026-05-12 16:22:21

|

1002人浏览过

|

来源于php中文网

原创

Nginx原生不支持基于TLS证书指纹的白名单,但可通过OpenResty+Lua或新版Nginx(≥1.19.7)的$ssl_client_fingerprint变量结合map模块实现等效控制,前提为启用mTLS并校验客户端证书。

如何在 nginx 中配置特定的证书指纹白名单以实现严格的内部访问

在 Nginx 中无法直接基于 TLS 证书指纹(如 SHA-256 Fingerprint)配置白名单来控制访问——Nginx 的标准模块不支持在运行时提取并比对客户端证书的指纹。但可通过组合使用 客户端证书双向认证(mTLS) 和 OpenSSL 命令预生成指纹 + Nginx 变量匹配 的方式,实现等效的“证书指纹级严格准入”。关键在于:将指纹校验逻辑前置到证书验证阶段,并利用 Nginx 的 $ssl_client_fingerprint(需 patch 或新版支持)或更通用可靠的 $ssl_client_raw_cert + Lua/OpenResty 方案。

前提:启用并强制双向 TLS 认证

只有启用 mTLS,Nginx 才能获取客户端证书原始内容,这是后续提取指纹的基础:

  • 配置受信任的 CA 证书(ssl_client_certificate),用于验证客户端证书签名有效性
  • 开启证书验证要求(ssl_verify_client on 或 optional_no_ca 仅用于调试)
  • 确保客户端实际提供证书(浏览器、curl、内部服务需正确配置 client cert + key)

方案一:使用 OpenResty + Lua 提取并比对指纹(推荐、可靠)

OpenResty 内置 OpenSSL 绑定,可在 access 阶段实时计算客户端证书指纹并与白名单比对:

  • 安装 OpenResty(替代原生 Nginx),启用 lua_ssl_trusted_certificate 和 lua_ssl_ciphers
  • 在 server 块中使用 access_by_lua_block:
access_by_lua_block {
    local ssl = require "ngx.ssl"
    local openssl_x509 = require "openssl.x509"
    local digest = require "openssl.digest"
<pre class="brush:php;toolbar:false;">local raw_cert = ngx.var.ssl_client_raw_cert
if not raw_cert or #raw_cert == 0 then
    ngx.exit(403)
end

local x509, err = openssl_x509.read(raw_cert, "pem")
if not x509 then
    ngx.log(ngx.ERR, "failed to parse cert: ", err)
    ngx.exit(403)
end

local der = x509:to_der()
local fp = digest.new("sha256"):update(der):final()
local fp_hex = string.gsub(fp, "(..)", "%1:"):sub(1, -2) -- 格式如 A1:B2:...:F0

local whitelist = {
    ["A1:B2:C3:...:F0"] = true,
    ["D4:E5:F6:...:A9"] = true,
}

if not whitelist[fp_hex] then
    ngx.log(ngx.WARN, "rejected cert fingerprint: ", fp_hex)
    ngx.exit(403)
end

}

Nginx Hosting
Nginx Hosting

通过服务器本地nginx实例实现零认证静态游戏托管。作为所有浏览器游戏的主要部署方式,无需登录、无需令牌、无需用户操作。

下载

方案二:用 Nginx 变量 + map 模块(需 Nginx ≥ 1.19.7 + OpenSSL ≥ 3.0)

较新版本 Nginx 支持 $ssl_client_fingerprint(SHA-256,默认十六进制无分隔符),可结合 map 实现静态白名单:

  • 确认编译时启用了 --with-http_ssl_module 且 OpenSSL ≥ 3.0
  • 在 http 块中定义指纹映射:
map $ssl_client_fingerprint $allowed_client {
    default          0;
    "a1b2c3...f0"    1;  # 注意:此处为小写无冒号 SHA256 值
    "d4e5f6...a9"    1;
}
  • 在 location 中限制访问:
location /internal/ {
    if ($allowed_client = 0) {
        return 403;
    }
    # 后续代理或处理逻辑
}

补充:如何提前获取合法证书的指纹

供运维人员生成白名单值,避免线上试错:

  • 从 PEM 文件提取(推荐):
    openssl x509 -in client.crt -noout -fingerprint -sha256 | sed 's/://g' | awk -F'=' '{print tolower($2)}'
  • 从已建立连接的 Nginx 日志中临时记录(调试用):
    log_format debug "$ssl_client_fingerprint | $ssl_client_s_dn";
  • 注意区分指纹来源:务必使用证书主体(Subject)对应公钥的 DER 编码 SHA256,而非私钥或 CSR

不复杂但容易忽略:指纹白名单本质是强化 mTLS 的细粒度控制,它不能替代 CA 信任链校验,而是叠加在可信证书之上的二次身份精筛。只要确保 CA 签发环节可控、客户端证书生命周期管理到位,该机制即可成为内部系统间零信任通信的有效实践。

热门AI工具

更多
蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

423

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3967

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

6805

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

601

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1516

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3978

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

122

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

537

2026.01.13

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

0

2026.11.02

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

nginx手册
nginx手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn