SNI: 實現多域名虛擬主機的SSL/TLS認證

為什么80%的碼農都做不了架構師?>>> ??hot3.png

一. 介紹 早期的SSLv2根據經典的公鑰基礎設施PKI(Public Key Infrastructure)設計,它默認認為:一臺服務器(或者說一個IP)只會提供一個服務,所以在SSL握手時,服務器端可以確信客戶端申請的是哪張證書。 但是讓人萬萬沒有想到的是,虛擬主機大力發展起來了,這就造成了一個IP會對應多個域名的情況。解決辦法有一些,例如申請泛域名證書,對所有*.yourdomain.com的域名都可以認證,但如果你還有一個yourdomain.net的域名,那就不行了。 在HTTP協議中,請求的域名作為主機頭(Host)放在HTTP Header中,所以服務器端知道應該把請求引向哪個域名,但是早期的SSL做不到這一點,因為在SSL握手的過程中,根本不會有Host的信息,所以服務器端通常返回的是配置中的第一個可用證書。因而一些較老的環境,可能會產生多域名分別配好了證書,但返回的始終是同一個。 既然問題的原因是在SSL握手時缺少主機頭信息,那么補上就是了。 SNI(Server Name Indication)定義在RFC 4366,是一項用于改善SSL/TLS的技術,在SSLv3/TLSv1中被啟用。它允許客戶端在發起SSL握手請求時(具體說來,是客戶端發出SSL請求中的ClientHello階段),就提交請求的Host信息,使得服務器能夠切換到正確的域并返回相應的證書。 [warning] 要使用SNI,需要客戶端和服務器端同時滿足條件,幸好對于現代瀏覽器來說,大部分都支持SSLv3/TLSv1,所以都可以享受SNI帶來的便利。[/warning] 二. nginx / apache 服務器端實現 nginx和apache服務端支持SNI參見: 《nginx 同一個IP上配置多個HTTPS主機》 《apache mod_gnutls實現多HTTPS虛擬主機》 三. 支持SNI的瀏覽器、服務器、庫 Internet Explorer 7 or later, on Windows Vista or higher. Does not work on Windows XP, even Internet Explorer 8. Mozilla Firefox 2.0 or later Opera 8.0 or later (the TLS 1.1 protocol must be enabled) Opera Mobile at least version 10.1 beta on Android[citation needed] Google Chrome (Vista or higher. XP on Chrome 6 or newer. OS X 10.5.7 or higher on Chrome 5.0.342.1 or newer) Safari 2.1 or later (Mac OS X 10.5.6 or higher and Windows Vista or higher) Konqueror/KDE 4.7 or later MobileSafari in Apple iOS 4.0 or later Android default browser on Honeycomb or newer Windows Phone 7[citation needed] MicroB on Maemo 四. 支持SNI的服務器 Apache 2.2.12 or later using mod_ssl(or alternatively with experimental mod_gnutls) Cherokee if compiled with TLS support Versions of lighttpd 1.4.x and 1.5.x with patch, or 1.4.24+ without patch Nginx with an accompanying OpenSSL built with SNI support LiteSpeed 4.1 or later Pound 2.6 or later Apache Tomcat on Java 7 or later Microsoft Internet Information Server IIS 8 五. 支持SNI的庫 Mozilla NSS 3.11.1 client-side only OpenSSL 0.9.8f (released 11 Oct 2007) – not compiled in by default, can be compiled in with config option ‘–enable-tlsext’ 0.9.8j (released 07 Jan 2009) through 1.0.0 (released 29 March 2010) – compiled in by default GNU TLS libcurl / cURL since 7.18.1 (released 30 Mar 2008) when compiled against an SSL/TLS toolkit with SNI support Python 3.2 (ssl, urllib and httplib modules) Qt 4.8 Oracle Java 7 JSSE 參考文檔:http://blog.hesey.net/2012/02/sni-for-multi-domain-ssl-tls.html http://serverfault.com/questions/109800/multiple-ssl-domains-on-the-same-ip-address-and-same-port

轉載于:https://my.oschina.net/766/blog/211504

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387598.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387598.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387598.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

echo(),print(),print_r(),var_dump()的區別

echo可以一次輸出多個值,多個值之間用逗號分隔。echo是語言結構(language construct),而并不是真正的函數,因此不能作為表達式的一部分使用。echo是php的內部指令,不是函數,無返回值。 print():函數print()…

我心目中的牛程序員、我們可以對比看看(人家還是看多年朋友面子上才肯幫忙1周,至少需支付1萬元辛苦費)...

為什么80%的碼農都做不了架構師?>>> 最近碰到客戶整個網站改版的需要,非常短的時間里只有1周時間里,需要把整個B2C網站徹底的進行版面,我自己估算了一下,就是往死里干一天工作48個小時,1周也干…

c#做端口轉發程序支持正向連接和反向鏈接

3389的時候 例子1:連接a機器的3389端口連不上,因為對方防火墻或者網關做了限制,只能訪問a機器的個別端口比如80。 例子2:連接a機器的幾乎所有端口都連不上(對方乃內網或者防火墻網關做了限制)&#xff0c…

Spring Boot(十四):spring boot整合shiro-登錄認證和權限管理

Spring Boot(十四):spring boot整合shiro-登錄認證和權限管理 使用Spring Boot集成Apache Shiro。安全應該是互聯網公司的一道生命線,幾乎任何的公司都會涉及到這方面的需求。在Java領域一般有Spring Security、Apache Shiro等安全框架,但是由…

通用權限管理系統組件 (GPM - General Permissions Manager) 不改數據庫、甚至不寫代碼就集成銅墻鐵壁權限管理組件...

為什么80%的碼農都做不了架構師?>>> 越成熟的東西,越牛X的東西,越簡單才對,簡單才是硬道理,蘋果的手機只有少數幾個按鍵,蘋果Ipad也很少的按鈕,甚至連蘋果的筆記本鍵盤都少一排&…

數學符號及讀法大全

數學符號及讀法大全 常用數學輸入符號: ≈ ≡ ≠ = ≤≥ < > ≮ ≯ ∷ + - / ∫ ∮ ∝ ∞ ∧ ∨ ∑ ∏ ∪ ∩ ∈ ∵ ∴ ⊥ ‖ ∠ ⌒ ≌ ∽ √ () 【】&#xff5b…

在使用win 7 無線承載網絡時,啟動該服務時,有時會提示:組或資源的狀態不是執行請求操作的正確狀態。 網上有文章指出,解決這個問題的方法是在設備管理器中啟動“Microsoft托管網絡虛擬適配

在使用win 7 無線承載網絡時,啟動該服務時,有時會提示:組或資源的狀態不是執行請求操作的正確狀態。 網上有文章指出,解決這個問題的方法是在設備管理器中啟動“Microsoft托管網絡虛擬適配器”,見 http://jingyan.baid…

阿里一年,聊聊我成長了什么,入職阿里的職業生涯感悟

2018.5.31~2019.5.31,一段精彩的旅程,渡過了在阿里一年的時光,這段時光有快樂、有焦慮、有迷茫、更有思考,思考的是自己過去的種種不足、思考的是一些現在看來之前錯誤的想法、思考的是如何成為一個更好的技術人,將這一…

偏差-方差分解(轉)

1、定義 這里所說的偏差-方差分解就是一種解釋模型泛化性能的一種工具。它是對模型的期望泛化錯誤率進行拆解。 樣本可能出現噪聲,使得收集到的數據樣本中的有的類別與實際真實類別不相符。對測試樣本 x,另 yd 為 x 在數據集中的標記,y 為真實…

用過C#的朋友可能認為它是一種十分安全的語言,其實C#也可以做到經典的緩沖區溢出。 本文章將用一個實例來描述C#究竟是如何發生緩沖區溢出的! 首先建立一個C# Console工程,并開啟工程的“允許

用過C#的朋友可能認為它是一種十分安全的語言,其實C#也可以做到經典的緩沖區溢出。 本文章將用一個實例來描述C#究竟是如何發生緩沖區溢出的! 首先建立一個C# Console工程,并開啟工程的“允許不安全代碼”選項 鍵入代碼: [csharp]…

COOKIE偽造登錄網站后臺

1.關于XSS(跨站腳本攻擊)和CSRF(跨站請求偽造)的知識,xss表示Cross Site Scripting(跨站腳本攻擊),它與SQL注入攻擊類似,SQL注入攻擊中以SQL語句作為用戶輸入,從而達到查詢/修改/刪除…

Spring Cloud 學習 (五) Zuul

Zuul 作為路由網關組件,在微服務架構中有著非常重要的作用,主要體現在以下 6 個方面: Zuul, Ribbon 以及 Eureka 相結合,可以實現智能路由和負載均衡的功能,Zuul 能夠將請求流量按某種策略分發到集群狀態的多個服務實例…

如何利用445端口進行入侵滲透 445端口入侵原因詳細解析。大家在進行入侵滲透個人電腦的時候,經常會碰到各種各樣的端口,比如135,1433,445,3306等端口,現在小編就給大家講解下445端口如

如何利用445端口進行入侵滲透 445端口入侵原因詳細解析。大家在進行入侵滲透個人電腦的時候,經常會碰到各種各樣的端口,比如135,1433,445,3306等端口,現在小編就給大家講解下445端口如何入侵。 445端口入侵…

項目復盤

前言 最近一年半多一直在做一個CMS項目,做了快兩年了也沒有上線,而且開發還走了不少,其中有不少原因是因為開發中頻繁改動需求導致開發人員失去耐心,但是其中還有一個重要的原因就是架構設計的不好,導致很多服務的邊界…

父、子頁面之間頁面元素的獲取,方法的調用

一、在iframe頁面上調取父級頁面元素 1.在父頁面上獲取iframe頁面元素(在父頁面修改子頁面div的背景色為紅色) js代碼如下&#xff1a; 1 <script type"text/javascript"> 2 window.onload function(){ 3 var iframe document.getElementById(iframeId)…

fiddler,他和其他抓包軟件有什么區別,如何使用fiddler進行抓包

前言&#xff1a;本文章是搭配《批量獲取微信公眾號》一文&#xff0c;介于群里朋友很熱情&#xff0c;我就趁著上班測完bug 來撰寫該文章&#xff0c;那么讀完本文&#xff0c;你會學習到什么呢&#xff1f; 什么是fiddler&#xff0c;他和其他抓包軟件有什么區別&#xff0c…

Vue導入非模塊化的第三方插件功能無效解決方案

一、問題&#xff1a; 最近在寫vue項目時&#xff0c;想引入某些非模塊化的第三方插件時&#xff0c;總是發現會有報錯。且在與本地運行插件測試對比時發現插件根本沒有注入到jQuery中&#xff08;console.log($.fn)查看當前jq有哪些方法&#xff09;&#xff0c;例如&#xff…

ES6筆記 -- 字符串拓展

字符串拓展 Unicode 相關 JS 允許使用/uxxxx的Unicode方式顯示字符, 但是只限于碼點在/u0000~/uFFFF之間, 超過該范圍的碼點必須用雙字節形式表示ES6 中, 將碼點放入大括號內, 就可以解讀JS 不能處理4個字節的字符, 字符串長度會被誤判為2ES6 提供了codePointAt方法, 能夠正確處…

android 轉發短信

通過這些代碼也可以對遠程手機實現短信控制。有興趣的可以自己改一下&#xff0c;說一下簡單的原理&#xff0c;要實現控制的話&#xff0c;必須得走一個固定的號碼&#xff0c;固定的格式&#xff0c;然后通過得到此號碼的內容&#xff0c;然后通過固定的內容&#xff0c;就可…

[Noi2016]區間

傳送門 Code /* 線段樹 尺取法 */ #include<bits/stdc.h> #define ll long long #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)>(b)?(b):(a)) #define reg register inline int read() {int x0,f1;char chgetchar();while(ch<0||ch>9){if(…