[nginx] nginx使用SNI功能的方法
SNI是什么
在使用TLS的时候,http server希望根据HTTP请求中HOST的不同,来决定使用不同的证书。
SNI细节
由于HTTP的HOST字段在HTTP GET中。而TLS的握手以及证书验证都是在HTTP开始之前。
这个时候,TLS协议的HELLO字段中增加了一个server name字段,让HTTP的client的可以提前
设置HOST,从而使server在tls的握手阶段可以选择证书。
然后,这个机制本身可以抛开http不关心,只要TLS client提前设置了server name,便可以实现SNI
nginx的配置
检测nginx是否支持sni,http://nginx.org/en/docs/http/configuring_https_servers.html#Server%20Name%20Indication
$ nginx -V
...
TLS SNI support enabled
...
启用了sni的nginx,如下变量会被赋值
$ssl_server_name
证书命令ssl_certificate,也可以通过变量进行设置,形如:
ssl_certificate $ssl_server_name.crt;
ssl_certificate_key $ssl_server_name.key;
于是我们可以通过 nginx config中的嵌入逻辑,完成sni的完整配置。
如:
stream {
upstream test {
server 127.0.0.1:;
}
map $ssl_server_name $sni_string {
test1.www.local test1;
test2.www.local test2;
test3.www.local test3;
default test1;
}
map $ssl_server_name $sni_string445 {
test1.www.local test4451;
test2.www.local test4452;
test3.www.local test4453;
default test4451;
}
server {
listen ssl;
ssl_certificate /data/sni/sni_${sni_string}.cer;
ssl_certificate_key /data/sni/sni_${sni_string}.key;
proxy_pass test;
}
server {
listen ssl;
ssl_certificate /data/sni445/sni_${sni_string445}.cer;
ssl_certificate_key /data/sni445/sni_${sni_string445}.key;
proxy_pass test;
}
}
注意,如果希望map命令支持host的最长匹配与正则,需要再添加hostnames关键字。
http://nginx.org/en/docs/http/ngx_http_map_module.html#map
map命令的本质,可以理解为通过旧的变量定义出了一个新的变量。
模拟tcp客户端的方法:
openssl s_client -connect t9: -CAfile ~/Keys/https/root/root.cer -servername test2.www.local
[openssl][nginx] 使用openssl模拟ssl/tls客户端测试nginx stream
模拟http客户端的方法:
curl --cacert ~/Keys/https/root/root.cer -vvvv https://test1.tls.local/
curl --cacert ~/Keys/https/root/root.cer -vvvv https://test2.tls.local/
curl --cacert ~/Keys/https/root/root.cer -vvvv https://test3.tls.local/
curl --cacert ~/Keys/https/root/root.cer -vvvv https://test3.www.local/
[nginx] nginx使用SNI功能的方法的更多相关文章
- [nginx] nginx源码分析--SNI性能分析
概念 我们已经知道什么是SNI,以及如何为用户配置SNI. [nginx] nginx使用SNI功能的方法 问题 通过观察配置文件,可以发现,针对每一个SSL/TLS链接, nginx都会动态的查找( ...
- 【转贴】Linux系统NGINX负载均衡404错误处理方法
NGINX负载均衡404错误处理方法 使用NGINX 实现负载均衡,但一组服务器的数据不是实施同步,主服务器有了数据要过段时间才同步到其他服务器 upstream image.stream.com ...
- nginx的反向代理功能和缓存功能
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- nginx配置虚拟主机vhost的方法详解
Nginx vhost配置,可实现基于ip.端口号.servername的虚拟主机,同时可避免直接修改主配置文件.在nginx下配置虚拟主机vhost非常方便.这篇文章主要介绍了nginx配置虚拟主机 ...
- Nginx 增加 Image 缩略图 功能
Nginx 增加 Image 缩略图功能,需要使用Nginx Image 缩略图 模块 官网地址:https://github.com/3078825/ngx_image_th ...
- Nginx Tengine ngx_http_upstream_check_module 健康功能检测使用
该模块可以为Tengine提供主动式后端服务器健康检查的功能. 该模块在Tengine-1.4.0版本以前没有默认开启,它可以在配置编译选项的时候开启:./configure --with-http_ ...
- 使用NGINX+LUA实现WAF功能 和nginx 防盗链
使用NGINX+LUA实现WAF功能 一.了解WAF 1.1 什么是WAF Web应用防护系统(也称:网站应用级入侵防御系统 .英文:Web Application Firewall,简称: WAF) ...
- 为Nginx启用目录浏览功能
今天工作需要,要给客户提供一个patch的下载地址,于是想用nginx的目录浏览功能来做,需要让客户看到指定一个目录下的文件列表,然后让他自己来选择该下载那个文件: 我们都知道在apache下可以配置 ...
- 06_Linux基础-NGINX和浏览器、网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命令-xz-gzip-bzip2-zip-tar-配置NGINX服务器支持下载功能-备份脚本
06_Linux基础-NGINX和浏览器.网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命令-xz-gzip-bzip2-zip-tar-配置NGINX服务器支持下载功能-备份脚本 一 ...
随机推荐
- vmware安装gho系统(win10上安装虚拟机然后在vmware上安装win7)
用ghost直接将gho转成vmdk将ghost32, gho文件放到同一目录, cmd里进入对应目录,输入以下命令ghost32 -clone,mode=restore,src=example.gh ...
- Swift4.0复习函数
1.函数的定义与调用: 一个函数定义的基本语法如以下代码所示: func function_name (param1: Int, param2: Float, param3: Double) -> ...
- redis cluster环境搭建
环境搭建 http://blog.51cto.com/zhoushouby/1560400 http://hot66hot.iteye.com/blog/2050676 ruby环境安装---ruby ...
- RobotFramework: 获取当前时间戳
robot中先导入DateTime库 #获取当前时间:2019-07-31 10:46:29.940 ${time} Get Current Date result_format=timestamp ...
- Django:bootstrap table自定义查询实现
参考:https://jalena.bcsytv.com/archives/tag/bootstrap 背景: bootstrap table在客户端分页方式下,自带有简易的搜索功能,但是功能太单一, ...
- linux和windows换行符的^M问题
起源 在windows中写的脚本执行完全没问题,代码一模一样,切换到linux中执行报错.利用命令 “vi/vim -b 文件名”查看文件发现每行结尾多了“^M”这样的结尾. 根源 通过查询得知,其问 ...
- Appium移动自动化测试-----(四)安装 appium Server
我们可以在Appium官方网站上下载操作系统相应的Appium版本. https://bitbucket.org/appium/appium.app/downloads/ 当前最新版本为 Appium ...
- JMeter 脚本请求错误 HTTP Status 415 的解决
然后在http请求上点击右键,添加配置元件-http信息头管理器,在信息头管理器上,添加一个参数,名称:Content-Type,值:application/json.然后在http请求上,conte ...
- 关于wireshark的过滤器规则学习小结
关于wireshark的过滤器规则学习小结 [前言] 这两天一直在熟悉wireshark的过滤器语法规则,以前也接触过这个工具,但只是学校老师教的如何去选择一个接口进行抓取,以及如何去分析一个包的数据 ...
- TypeScript 高级类型 类(class)
传统的JavaScript程序使用函数和基于原型的继承来创建可重用的组件,但对于熟悉使用面向对象方式的程序员来讲就有些棘手,因为他们用的是基于类的继承并且对象是由类构建出来的. 从ECMAScript ...