当前位置: 首页 > news >正文

深圳住房和建设局网站官网阿坝州网站制作

深圳住房和建设局网站官网,阿坝州网站制作,鹿泉网站制作公司,网站建设和维护需要学的东西文章目录1.前置环境搭建2.测试SNI生效条件(时间)3. 证书对SNI的影响3.1 双方使用同一个证书#xff1a;3.2 双方使用不同的证书与私钥4. 端口号区分测试4.1 端口号区分#xff0c;证书区分#xff1a;4.2 端口号区分,证书不区分#xff1a;5.总结SNI运行机制6. SNI机制绕过… 文章目录1.前置环境搭建2.测试SNI生效条件(时间)3. 证书对SNI的影响3.1 双方使用同一个证书3.2 双方使用不同的证书与私钥4. 端口号区分测试4.1 端口号区分证书区分4.2 端口号区分,证书不区分5.总结SNI运行机制6. SNI机制绕过host头探究6.1 端口相同的SSL虚拟主机6.2 端口不同的SSL虚拟主机6.3 小结在先前的文章中我们通过一些列分析在一个LNMP架构下的站群系统中挖掘出了基于host字段进行注入的SQL注入漏洞。在解决HOST绕过问题时我们给出了三种解决方案。冒号分割、双写host字段、利用SNI机制。 经过测试冒号分割是可行的双写host字段被高版本的nginx返回了400无法使用。最后一个则是SNI机制。 SNIServer Name Indication定义在RFC 4366是一项用于改善SSL/TLS的技术在SSLv3/TLSv1中被启用。它允许客户端在发起SSL握手请求时具体说来是客户端发出SSL请求中的ClientHello阶段就提交请求的Host信息使得服务器能够切换到正确的域并返回相应的证书。 我们知道证书机制是为了加密通信流量防止第三方窃听而存在的。而同一台主机配置多个网站时会用到虚拟主机技术每一个网站对应的证书也是不一样的。那么在用户与服务器第一次建立连接时将使用哪一个证书进行通信呢最初就是用的默认证书而之后为了适应这样的需求RFC推出了SNI机制在TLS协议初期即客户端发送自己的client hello报文时就将host字段加入进去以供服务器区分目的网站。选到对应的证书。 随后证书就为客户端和服务器加密了通信内容也就是说。后续的通信一旦发现是用某一个证书解密的。不需要再做判断可以直接将数据报文交给对应的网站即可。也就是在建立了稳定的https通信之后服务器中间件将不需要对host头进行解析直接通过证书实现定向解析。 那么我们会产生一系列思考。 第一SNI机制会一直触发吗 单https虚拟主机 —多https虚拟主机 第二控制证书为变量测试证书对于流量解析的影响—证明是用证书私钥做流量区分的 第三控制端口号为变量测试端口号对于流量解析的影响 1.前置环境搭建 既然如此我们就需要准备两套完整的nginx解析https虚拟主机进行测试。以及个服务器证书与私钥。 #1.双证书准备 #1.创建证书目录 [rootblackstone nginx]# mkdir certificate [rootblackstone nginx]# cd certificate/#2.生成私钥 - 要求你输入这个key文件的密码。给nginx使用。每次reload nginx配置时候都要验证这个PAM密码。 openssl genrsa -des3 -out ssl.key 4096 openssl genrsa -des3 -out sslb.key 4096 #3.生成CA证书文件 -- 此处为了区分证书我们只好开两份CA证书相当于两个机构的认证 openssl req -new -key ssl.key -out aaa.csr openssl req -new -key sslb.key -out bbb.csr#4.利用CA证书签名生成服务器身份证书 - 证书签发有效期365天 openssl x509 -req -days 365 -in aaa.csr -signkey ssl.key -out aaa.crt openssl x509 -req -days 365 -in bbb.csr -signkey sslb.key -out bbb.crt #5.检查生成情况 - 此时包含我们自己的私钥自己的证书.crt文件以及csrCA证书 [rootblackstone certificate]# ll total 32 -rw-r--r-- 1 root root 1895 Feb 10 23:34 aaa.crt -rw-r--r-- 1 root root 1724 Feb 10 23:32 aaa.csr -rw-r--r-- 1 root root 1907 Feb 11 00:52 bbb.crt -rw-r--r-- 1 root root 1728 Feb 11 00:51 bbb.csr -rw-r--r-- 1 root root 3311 Feb 11 00:50 sslb.key -rw-r--r-- 1 root root 3311 Jan 11 21:24 ssl.key网页部署 [rootblackstone www]# mkdir -p /var/www/aaa [rootblackstone www]# mkdir -p /var/www/bbb [rootblackstone www]# echo this is aaa.com /var/www/aaa/index.html [rootblackstone www]# echo this is bbb.com /var/www/bbb/index.html记得修改本机的host文件C:\Windows\System32\drivers\etc 192.168.2.169 www.bbb.com 192.168.2.169 www.aaa.com2.测试SNI生效条件(时间) 1.单个https虚拟主机 server {listen 443 ssl;server_name www.aaa.com;ssl_certificate /usr/local/nginx/certificate/aaa.crt;ssl_certificate_key /usr/local/nginx/certificate/ssl.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root /var/www/aaa;index index.html index.htm;}}重启nginx使用浏览器访问进行抓包分析。 #后面的所有重启都建议直接把nginx关闭彻底重启 [rootblackstone www]# /usr/local/nginx/sbin/nginx -s quit Enter PEM pass phrase: [rootblackstone www]# /usr/local/nginx/sbin/nginx Enter PEM pass phrase:可以看到确实在client hello报文内部有这个主机名被发送给服务器了。 故发送主机名是高版本浏览器的自发行为不需要任何激发条件。浏览器会主动发送server name 以支持SNI机制。即SNI机制无需配置只要服务器支持就可以使用。 3. 证书对SNI的影响 3.1 双方使用同一个证书 server {listen 443 ssl;server_name www.aaa.com;ssl_certificate /usr/local/nginx/certificate/aaa.crt;ssl_certificate_key /usr/local/nginx/certificate/ssl.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root /var/www/aaa;index index.html index.htm;}}server {listen 443 ssl;server_name www.bbb.com;ssl_certificate /usr/local/nginx/certificate/aaa.crt;ssl_certificate_key /usr/local/nginx/certificate/ssl.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root /var/www/bbb;index index.html index.htm;}} 测试访问情况 可以实现分流。 3.2 双方使用不同的证书与私钥 这时我们尝试进行证书与私钥的区分配置 server {listen 443 ssl;server_name www.aaa.com;ssl_certificate /usr/local/nginx/certificate/aaa.crt;ssl_certificate_key /usr/local/nginx/certificate/ssl.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root /var/www/aaa;index index.html index.htm;}}server {listen 443 ssl;server_name www.bbb.com;ssl_certificate /usr/local/nginx/certificate/bbb.crt;ssl_certificate_key /usr/local/nginx/certificate/sslb.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root /var/www/bbb;index index.html index.htm;}}再次测试访问效果 [rootblackstone certificate]# /usr/local/nginx/sbin/nginx -s reload Enter PEM pass phrase: Enter PEM pass phrase: 各自可以收到各自的证书建立各自的通信。 4. 端口号区分测试 4.1 端口号区分证书区分 server {listen 8443 ssl;server_name www.bbb.com;ssl_certificate /usr/local/nginx/certificate/bbb.crt;ssl_certificate_key /usr/local/nginx/certificate/sslb.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root /var/www/bbb;index index.html index.htm;}}server {listen 8444 ssl;server_name www.aaa.com;ssl_certificate /usr/local/nginx/certificate/aaa.crt;ssl_certificate_key /usr/local/nginx/certificate/ssl.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root /var/www/aaa;index index.html index.htm;} 测试效果 [rootblackstone certificate]# vim ../conf/nginx.conf [rootblackstone certificate]# /usr/local/nginx/sbin/nginx -s reload Enter PEM pass phrase: Enter PEM pass phrase: 可以看到证书已经分别发送给了两个虚拟主机客户端。实现流量区分 4.2 端口号区分,证书不区分 server {listen 8443 ssl;server_name www.bbb.com;ssl_certificate /usr/local/nginx/certificate/aaa.crt;ssl_certificate_key /usr/local/nginx/certificate/ssl.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root /var/www/bbb;index index.html index.htm;}}server {listen 8444 ssl;server_name www.aaa.com;ssl_certificate /usr/local/nginx/certificate/aaa.crt;ssl_certificate_key /usr/local/nginx/certificate/ssl.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root /var/www/aaa;index index.html index.htm;}中途效果不明显大家可以重启nginx服务因为服务一直开着可能会有缓存文件。 [rootblackstone nginx]# /usr/local/nginx/sbin/nginx -s quit Enter PEM pass phrase: Enter PEM pass phrase: [rootblackstone nginx]# /usr/local/nginx/sbin/nginx Enter PEM pass phrase: Enter PEM pass phrase: 再次测试查看效果 服务端两次传递同一个证书实现通信。实现完整的虚拟主机分流访问。 5.总结SNI运行机制 通过以上种种测试我们发现无论使相同端口号证书不同。达到证书区分传递的效果。还是证书不同端口号也不同实现测试环境下的虚拟主机配置。SNI始终都可以准确的找到目标主机即使是在我们的证书相同的情况下。 其实这一点也不费解我们回顾一下之前学过的TSL通信过程 第一次握手客户端发送协议版本号随机数支持套件 第二次握手服务端发送随机数版本号确认支持套件。同时发送服务端证书表明自己的身份(相当于发了个身份证过去)。 第三次握手客户端收到证书进行身份验证验证完毕后利用从证书内部取出的公钥加密传输一串新的随机数pre_master给服务端。此时客户端服务端都共享了三个随机数,客户端随机数、服务端随机数、pre_master。于是根据三个随机数双方可以计算出共同的加密对称密钥进行通信。生成完会话密钥后客户端发一个「Change Cipher Spec」告诉服务端开始使用加密方式发送消息。再发一个「Encrypted Handshake MessageFinishd」消息把之前所有发送的数据做个摘要再用会话密钥master secret加密一下让服务器做个验证验证加密通信是否可用和之前握手信息是否有被中途篡改过。 第四次握手服务器也是同样的操作发「Change Cipher Spec」和「Encrypted Handshake Message」消息如果双方都验证加密和解密没问题那么握手正式完成。 最后就是用会话密钥进行双方的通信 也就是说客户端服务器通信过程中的密钥是新协商出来的。具有唯一标识性的这样一个密钥。那么通过SNI机制在第一次客户端发送client hello包时就发送的server name 确定到底访问的哪一个虚拟主机。后面的通信自然可以通过解密密钥寻找到对应的虚拟主机。以此完成完整的SNI机制。 实现了可以为不同的虚拟主机配置这个不同的服务器证书。 6. SNI机制绕过host头探究 这样一个绕过出现的环境就很明显了必须是配置了SSL的nginx服务器。 之前有同学提出过疑问认为仅仅配置一个443端口的虚拟SSL主机。难以区分到底是由于我们的请求被转移到了默认的443端口处理虚拟主机上还是说我们成功绕过了这样一个检测机制呢接着3.2的环境我们对其进行进一步的测试 6.1 端口相同的SSL虚拟主机 #注意那个server在上面在配置文件里就默认的是默认虚拟主机server {listen 443 ssl;server_name www.bbb.com;ssl_certificate /usr/local/nginx/certificate/aaa.crt;ssl_certificate_key /usr/local/nginx/certificate/ssl.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root /var/www/bbb;index index.html index.htm;}}server {listen 443 ssl;server_name www.aaa.com;ssl_certificate /usr/local/nginx/certificate/aaa.crt;ssl_certificate_key /usr/local/nginx/certificate/ssl.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root /var/www/aaa;index index.html index.htm;}}相同端口号不同的证书条件下修改了host文件后跳转到了默认的bbb.com虚拟主机上。绕过失效 6.2 端口不同的SSL虚拟主机 server {listen 443 ssl;server_name www.bbb.com;ssl_certificate /usr/local/nginx/certificate/bbb.crt;ssl_certificate_key /usr/local/nginx/certificate/sslb.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root /var/www/bbb;index index.html index.htm;}}server {listen 8443 ssl;server_name www.aaa.com;ssl_certificate /usr/local/nginx/certificate/aaa.crt;ssl_certificate_key /usr/local/nginx/certificate/ssl.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root /var/www/aaa;index index.html index.htm;}}访问效果 再次进行测试 这次没有在跳默认了说明可行。 6.3 小结 SNI绕过host生效的条件其实就是单一端口下仅仅绑定一台SSL虚拟主机。因为我们在6.1中看到端口相同时同一服务器绑定多台SSL主机时所有的请求会交给默认页面。如果漏洞点在默认页面就好说如果不在。就无法使用SNI进行绕过了。 但同时如果服务器是单一的配置了一个443端口的ssl虚拟主机那么将可以进行SNI机制的HOST头绕过。
http://www.hkea.cn/news/14403385/

相关文章:

  • 网站建设百度百科米方科技网站建设
  • 移动 网站模板动画设计和动漫设计一样吗
  • wordpress网站名称网站建设网址导航网
  • 免费网站建站模板南昌科技网站建设
  • ps切片以后 怎么做网站58同城保定网站建设
  • 中国网站优化wordpress添加用户注册登录界面
  • 给人做ppt的网站网站标题logo怎么做
  • 江苏做网站义乌百度推广公司
  • 建网站价格 优帮云网站 毕业设计代做
  • zencart 网站安装超低价的锦州网站建设
  • 毕业设计医院网站设计怎么做打开网址资料网站
  • 长沙的汽车网站建设广告设计基础知识
  • 制作网站需要wordpress山东经济建设网站
  • 网站浏览记录怎么做上海大型网站
  • 医院做网站需要去备案网站建设综合设计
  • 亚马逊外贸网站如何做软件工程专业介绍
  • 网站制作平台能赚钱吗住房和建设部信息网站
  • 唯品会一家做特卖的网站 分析招聘外包服务公司
  • 个人网站注册衡水 网站建设
  • 网站首页图片做多大wordpress搬家后乱码
  • 旅游搭建网站渠道营销推广方案
  • 做外贸常用那几个网站大兴网站开发公司
  • 快递系统专注快递企业网站开发宝安建设网站
  • 买网站主机二手购物网站建设方案
  • 如何快速推广一个网站惠州百度seo哪家好
  • 南京营销型网站中美关系最新消息最新进展
  • 来自网站的临时会话中国建设网站培训通知
  • 河北衡水建设网站公司怎么打开网站
  • 网站首页index.html怎样做网站网站
  • 公司制作网站洮南网站建设哪家好