我正在使用nginx 1.16.0,现在有一种情况,其中服务器名称的一部分需要加载不同的SSL证书。由于某些原因,我不能使用OpenResty,因此我需要编写模块来实现此功能。
现在我想到了两个选择。
1.为ssl_certificate和其他相关指令设置自定义变量,编写模块可以判断服务器名称并有选择地动态修改该变量,从而达到动态证书的效果
set $certificate_var ''; #Create custom variables
set $certificate_key_var '';
GetCertificateWithUpdateVariable 'certificate_var' 'certificate_key_var';#Modify the values of custom variables according to business logic within the custom module
ssl_certificate $certificate_var;
ssl_certificate_key $certificate_key_var;
我开始实施这两个方案,但是遇到了问题。
第一个解决方案:ssl_certificate不支持用户定义的变量,nginx在1.15.9版之后开始支持一些内置变量,可以将这些变量添加到ssl_certificate指令中,但这有点固定,我可以不做有判断力的事情,所以这个想法不能满足我的需求。需求。
ssl_certificate /root/ssl/$ssl_server_name/fullchain.cer;
ssl_certificate_key /root/ssl/$ssl_server_name/nginx.kooboo.cn.key;
其他想法可以绕过此限制吗?
1.无需修改自定义变量,而是直接在模块中获取并修改ssl_certificate指令本身。这可行吗?怎么做?
2.修改模块中$ ssl_server_name的值是否可行?怎么做?
第二种解决方案是修改有关ssl的nginx的源代码。 Nginx的源代码非常庞大。我找不到ssl的核心部分。从逻辑上讲,它应该是一个HTTP请求,它是在判断服务器名称之后加载相应的证书的。该链接应该是键值对搜索过程,我现在想更改该块的过程,我想自己管理该键值对,以便控制他的搜索。 这部分容易实现吗?我应该修改代码的哪一部分?
期待您的回复。谢谢
答案 0 :(得分:0)
我已经有一段时间没有登录了,但是我已经实现了该功能。这是一条记录:您只需要更改在ngx_http_ssl_module.c
中注册的SSL_CTX_set_cert_cb函数。