lua-resty-ssl-bump

"一个用于为通配符域名动态生成和缓存 SSL 证书的 Lua 模块"

$ opm get iakuf/lua-resty-ssl-bump

lua-resty-ssl-bump

一个用于为通配符域名动态生成和缓存 SSL 证书的 Lua 模块,类似于 Squid 的 SSL Bump 功能。

安装

要安装此模块,您可以使用 OpenResty 包管理器 (opm)

    opm get iakuf/lua-resty-ssl-bump

依赖项

此模块需要 lua-cjsonlua-resty-openssl 库才能正常工作。 确保这两个库都已安装并在您的 OpenResty 环境中可用。

安装 lua-cjson

您可以使用 OPM 安装 lua-cjson

    opm get ledgetech/lua-cjson

安装 lua-resty-openssl

您可以使用 OPM 安装 lua-resty-openssl

    opm get fffonion/lua-resty-openssl 

使用

生成自己的 CA 证书

要生成自己的 CA 证书,请使用以下命令

    openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -extensions v3_ca -keyout /path/to/ca_cert.key -out /path/to/ca_cert.crt

/path/to/ca_cert.key/path/to/ca_cert.crt 替换为您要保存 CA 密钥和证书的实际路径。

Nginx 配置

将以下配置添加到您的 nginx.conf 文件中

  1. 定义共享字典:

    http {
        lua_shared_dict cert_cache 20m; # Approximately stores 4000 certificate pairs
    }
  1. 在 worker 中初始化模块:

    http {
        init_worker_by_lua_block {
            local ssl_bump = require("resty.ssl_bump")
            local ok, err = ssl_bump.init("/path/to/ca_cert.crt", "/path/to/ca_cert.key", {
                C = "CN",
                ST = "Beijing",
                L = "Beijing",
                O = "Geelevel Corp"
            })
            if not ok then
                ngx.log(ngx.ERR, "failed to initialize ssl_bump: ", err)
                return
            end
        }
    }
  1. 设置 SSL 配置:

    http {
        server {
            listen 443 ssl;
    
            ssl_certificate     /path/to/ca_cert.crt; # 占位
            ssl_certificate_key /path/to/ca_cert.key; # 占位
    
            ssl_session_cache   shared:SSL:10m;
            ssl_session_timeout 10m;
    
            ssl_ciphers  HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers   on;
    
            # Dynamic generation of certificates
            ssl_certificate_by_lua_block {
                local ssl_bump = require("resty.ssl_bump")
                ssl_bump.run()
            }
    
            location / {
                proxy_pass http://your_backend;
            }
        }
    }

示例

这是一个包含必要配置的示例 nginx.conf 文件

    http {
        lua_shared_dict cert_cache 20m; # Approximately stores 4000 certificate pairs
    
        init_worker_by_lua_block {
            local ssl_bump = require("resty.ssl_bump")
            local ok, err = ssl_bump.init("/path/to/ca_cert.crt", "/path/to/ca_cert.key", {
                C = "CN",
                ST = "Beijing",
                L = "Beijing",
                O = "Geelevel Corp"
            })
            if not ok then
                ngx.log(ngx.ERR, "failed to initialize ssl_bump: ", err)
                return
            end
        }
    
        server {
            listen 443 ssl;
    
            ssl_certificate     /path/to/ca_cert.crt; # 占位
            ssl_certificate_key /path/to/ca_cert.key; # 占位
    
            ssl_session_cache   shared:SSL:10m;
            ssl_session_timeout 10m;
    
            ssl_ciphers  HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers   on;
    
            # Dynamic generation of certificates
            ssl_certificate_by_lua_block {
                local ssl_bump = require("resty.ssl_bump")
                ssl_bump.run()
            }
    
            location / {
                proxy_pass http://your_backend;
            }
        }
    }

导入您的 CA 证书

在 Linux 上

要在 Ubuntu 上导入您的 CA 证书

    cp /path/to/ca_cert.crt  /usr/local/share/ca-certificates/ca_cert.crt
    update-ca-certificates

在 Windows 上

要在 Windows 上导入您的 CA 证书

    certmgr.exe /add %cd%\ca_cert.crt /s /r localMachine root 

许可证

MIT

作者

"Fu Kai <iakuf@163.com>"

许可证

mit

版本