使用ssl_certificate_by_lua指令动态加载证书

1、下载 OpenResty - 下载

根据自己系统选择下载,我的是64位

2、解压到目录

3、启动openresty

进入解压后的目录,执行nginx.exe

浏览器输入 http://localhost 查看是否正常。显示以下画面就表示没有问题。

接下来可以开始准备动态安装证书

4、使用openssl-win64生成测试证书(待补充)

openssl 下载地址。 也可以使用csdn下载​​​​​​​

5、进入conf目录,编辑nginx.conf

bash 复制代码
#增加ssl server配置
	server {
        listen       443 ssl;
        server_name  localhost;

        ssl_certificate      cert/server.crt;
        ssl_certificate_key  cert/server.key;
		ssl_certificate_by_lua_file conf\cert\ssl.lua;


        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {

			root   html;
            index  index.html index.htm;
        }
    }

6、编写ssl.lua , 放到conf/cert下

Lua 复制代码
local ssl = require "ngx.ssl"
 
-- 清除之前设置的证书和私钥
local ok, err = ssl.clear_certs()
if not ok then
    ngx.log(ngx.ERR, "failed to clear existing (fallback) certificates")
    return ngx.exit(ngx.ERROR)
end
 
-- 获取证书内容,比如 io.open("my.crt"):read("*a")
local cert_data, err
cert_data = io.open("conf\\cert\\localhost.crt"):read("*a")
if not cert_data then
    ngx.log(ngx.ERR, "failed to get PEM cert: ", err)
    return
end
 
-- 解析出 cdata 类型的证书值,你可以用 lua-resty-lrucache 缓存解析结果
local cert, err = ssl.parse_pem_cert(cert_data)
if not cert then
    ngx.log(ngx.ERR, "failed to parse PEM cert: ", err)
    return
end
 
local ok, err = ssl.set_cert(cert)
if not ok then
    ngx.log(ngx.ERR, "failed to set cert: ", err)
    return
end
 
local pkey_data, err
pkey_data = io.open("conf\\cert\\localhost.key"):read("*a")
if not pkey_data then
    ngx.log(ngx.ERR, "failed to get DER private key: ", err)
    return
end
 
local pkey, err = ssl.parse_pem_priv_key(pkey_data)
if not pkey then
    ngx.log(ngx.ERR, "failed to parse pem key: ", err)
    return
end
 
local ok, err = ssl.set_priv_key(pkey)
if not ok then
    ngx.log(ngx.ERR, "failed to set private key: ", err)
    return
end
相关推荐
啊阿狸不会拉杆3 小时前
《计算机网络-自顶向下方法》5.4 ISP之间的路由选择:BGP 读书笔记
网络·计算机网络·接口隔离原则
Delite8024 小时前
摆脱实验室束缚:便携式卡尔费休微量水分检测技术与现场应用解析
大数据·网络·人工智能
ACP广源盛139246256735 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
明月_清风5 小时前
MCP vs ACP vs LSP:AI 时代三大协议的「三足鼎立」
人工智能·网络协议·agent
ACP广源盛139246256735 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
我爱cope6 小时前
【计算机网络 | 传输层3:TCP 协议概述:面向连接、可靠传输到底意味着什么?】
网络·网络协议·学习·tcp/ip·计算机网络·传输层
OIDCAT7 小时前
国产USB转千兆网卡芯片CH398-RTL8153国产替代实测与选型
网络·嵌入式硬件·智能硬件·国产芯片·usb转千兆网卡
M--Y9 小时前
Docker数据持久化与网络架构
网络·docker·架构
myy-learn10 小时前
30-HTTP协议
网络·网络协议·http