ssl_certificate_by_lua_file在server块中定义,影响其他server块

123 views
Skip to first unread message

leave...@gmail.com

unread,
Jan 24, 2019, 10:20:06 PM1/24/19
to openresty
我有一个nginx,上面有很多域名,我通过ngx.ssl实现了根据server_name 来返回证书的功能,配置在default_server的server块里面,现在产生一个现象:当我在default server配置了ssl_certificate_by_lua_file,我配置的其他的server配置的https不能访问,根据日志显示,实际上加载了lua脚本,我去掉后请求就没问题了,或者name, err = ssl.server_name(),当name为nil时不进行证书相关设置也没有问题。

tokers

unread,
Jan 24, 2019, 10:51:54 PM1/24/19
to openresty
Hello!

这个是符合预期的。

在 nginx 发现当前连接需要进行 SSL/TLS 握手时,它需要一个 SSL_CTX 实例用以创建 SSL 结构,
但是此时 nginx 不具备任何信息用以进行虚拟主机匹配,所以使用的永远是默认虚拟主机的 sscf (ngx_http_ssl_module)。

leave...@gmail.com

unread,
Jan 25, 2019, 2:12:02 AM1/25/19
to openresty
你好,感谢指导,还有一个问题,NGINX不是已经支持sni了 ,并且在不通过ngx.ssl 修改https证书的情况下,nginx并不会返回默认虚拟主机的证书信息而是返回对应host正确的证书,这是什么原因


在 2019年1月25日星期五 UTC+8上午11:51:54,tokers写道:

tokers

unread,
Jan 25, 2019, 2:35:31 AM1/25/19
to openresty
Hello!

处理证书是在 server hello 这一步当中完成的,此时 client hello 已经处理完毕,Nginx 注册的 SNI 回调已经被执行,
所以如果这次握手,客户端携带了 SNI 扩展的话,Nginx 是已经完成了虚拟主机匹配了的。

可以看下 Nginx 的 SNI callback,在 src/http/ngx_http_request.c:ngx_http_ssl_servername。
Reply all
Reply to author
Forward
0 new messages