nginx ssl 拒绝不匹配的 server_name 请求
Posted
技术标签:
【中文标题】nginx ssl 拒绝不匹配的 server_name 请求【英文标题】:nginx ssl rejecting non matched server_name requests 【发布时间】:2018-09-19 13:07:24 【问题描述】:server
lerver
listen 443 ssl;
server_name proxy.test.com;
ssl_certificate sni.crt;
ssl_certificate_key sni.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
location /
root html;
index index.html index.htm;
server
listen 443 default_server ssl;
server_name test.com;
ssl_certificate test-cn.crt;
ssl_certificate_key test-cn.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
location /
root html;
index index.html index.htm;
我想用 ssl 配置 nginx 以支持 SNI 请求(来自客户端的 ClientHello 中的 server_name 指令),拒绝与不匹配的 server_name SNI 请求的握手,并为非 SNI 请求提供默认证书(没有 server_name 指令的 ClientHello)。
通过以上配置,我可以让 nginx 响应 proxy.test.com 的 SNI 请求。但是对于 SNI 请求为 invalid-domain.com 的 ClientHello 和没有 SNI 请求的 ClientHello,使用默认服务器块。如何让 nginx 拒绝对 invalid-domain.com 的 SNI 请求,同时为非 SNI 请求设置默认服务器块?
【问题讨论】:
【参考方案1】:我遇到了 nginx 的这个新功能,如果请求的 server_name 与您在 server 指令中列出的内容不匹配,它甚至会在发送 server_hello 之前丢弃请求。我认为这将有助于完成您想要做的事情。除非 SNI 与 proxy.test.com 匹配,否则以下配置应将所有请求丢弃到 443。
server
listen 443 ssl;
ssl_reject_handshake on;
server
listen 443 ssl;
server_name proxy.test.com;
ssl_certificate sni.crt;
ssl_certificate_key sni.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
location /
root html;
index index.html index.htm;
文档链接。
ssl_reject_handshake
【讨论】:
以上是关于nginx ssl 拒绝不匹配的 server_name 请求的主要内容,如果未能解决你的问题,请参考以下文章
“aaaaa”存储库的拉取访问被拒绝不存在或可能需要“docker login”