返回頂部
關(guān)閉軟件導(dǎo)航
位置:首頁(yè) > 技術(shù)分享 > SEO優(yōu)化>大型網(wǎng)站的HTTPS實(shí)踐基于協(xié)議和配置的優(yōu)化

上文講到HTTPS對(duì)用戶訪問(wèn)速度的影響。

本文就為大家介紹HTTPS在訪問(wèn)速度,計(jì)算性能,安全等方面基于協(xié)議和配置的優(yōu)化。

HTTPS訪問(wèn)速度優(yōu)化Tcpfastopen

HTTPS和HTTP使用TCP協(xié)議進(jìn)行傳輸,也就意味著必須通過(guò)三次握手建立TCP連接,但一個(gè)RTT的時(shí)間內(nèi)只傳輸一個(gè)syn包是不是太浪費(fèi)?能不能在syn包發(fā)出的同時(shí)捎上應(yīng)用層的數(shù)據(jù)?其實(shí)是可以的,這也是tcpfastopen的思路,簡(jiǎn)稱(chēng)TFO。具體原理可以參考rfc7413。

遺憾的是TFO需要高版本內(nèi)核的支持,linux從3.7以后支持TFO,但是目前的windows系統(tǒng)還不支持TFO,所以只能在公司內(nèi)部服務(wù)器之間發(fā)揮作用。

HSTS

前面提到過(guò)將用戶HTTP請(qǐng)求302跳轉(zhuǎn)到HTTPS,這會(huì)有兩個(gè)影響:

不安全,302跳轉(zhuǎn)不僅暴露了用戶的訪問(wèn)站點(diǎn),也很簡(jiǎn)單被中間者支持。降低訪問(wèn)速度,302跳轉(zhuǎn)不僅需要一個(gè)RTT,瀏覽器執(zhí)行跳轉(zhuǎn)也需要執(zhí)行時(shí)間。

由于302跳轉(zhuǎn)事實(shí)上是由瀏覽器觸發(fā)的,服務(wù)器無(wú)法完全控制,這個(gè)需求導(dǎo)致了HSTS的誕生:

HSTS(HTTPStrictTransportSecurity)。服務(wù)端返回一個(gè)HSTS的httpheader,瀏覽器獲取到HSTS頭部之后,在一段時(shí)間內(nèi),不管用戶輸入還是都會(huì)默認(rèn)將請(qǐng)求內(nèi)部跳轉(zhuǎn)成

Chrome,firefox,ie都支持了HSTS(caniuse.com/#feat=stricttransportsecurity)。Sessionresume

Sessionresume顧名思義就是復(fù)用session,實(shí)現(xiàn)簡(jiǎn)化握手。復(fù)用session的好處有兩個(gè):

減少了CPU消耗,因?yàn)椴恍枰M(jìn)行非對(duì)稱(chēng)密鑰交換的計(jì)算。提升訪問(wèn)速度,不需要進(jìn)行完全握手階段二,節(jié)省了一個(gè)RTT和計(jì)算耗時(shí)。

TLS協(xié)議目前提供兩種機(jī)制實(shí)現(xiàn)sessionresume,分別介紹一下。

Sessioncache

Sessioncache的原理是使用clienthello中的sessionid查詢(xún)服務(wù)端的sessioncache,假如服務(wù)端有對(duì)應(yīng)的緩存,則直接使用已有的session信息提前完成握手,稱(chēng)為簡(jiǎn)化握手。

Sessioncache有兩個(gè)缺點(diǎn):

需要消耗服務(wù)端內(nèi)存來(lái)存儲(chǔ)session內(nèi)容。目前的開(kāi)源軟件包括nginx,apache只支持單機(jī)多進(jìn)程間共享緩存,不支持多機(jī)間分布式緩存,對(duì)于百度或者其他大型互聯(lián)網(wǎng)公司而言,單機(jī)sessioncache幾乎沒(méi)有作用。

Sessioncache也有一個(gè)非常大的優(yōu)點(diǎn):

sessionid是TLS協(xié)議的標(biāo)準(zhǔn)字段,市面上的瀏覽器全部都支持sessioncache。

百度通過(guò)對(duì)TLS握手協(xié)議及服務(wù)器端實(shí)現(xiàn)的優(yōu)化,已經(jīng)支持全局的sessioncache,能夠明顯提升用戶的訪問(wèn)速度,節(jié)省服務(wù)器計(jì)算資源。

Sessionticket

上節(jié)提到了sessioncache的兩個(gè)缺點(diǎn),sessionticket能夠彌補(bǔ)這些不足。

Sessionticket的原理參考RFC4507。簡(jiǎn)述如下:

server將session信息加密成ticket發(fā)送給瀏覽器,瀏覽器后續(xù)握手請(qǐng)求時(shí)會(huì)發(fā)送ticket,server端假如能成功解密和處理ticket,就能完成簡(jiǎn)化握手。

顯然,sessionticket的優(yōu)點(diǎn)是不需要服務(wù)端消耗大量資源來(lái)存儲(chǔ)session內(nèi)容。

Sessionticket的缺點(diǎn):

sessionticket只是TLS協(xié)議的一個(gè)擴(kuò)展特性,目前的支持率不是很廣泛,只有60%左右。sessionticket需要維護(hù)一個(gè)全局的key來(lái)加解密,需要考慮KEY的安全性和部署效率。

總體來(lái)講,sessionticket的功能特性明顯優(yōu)于sessioncache。希望客戶端實(shí)現(xiàn)優(yōu)先支持sessionticket。

Ocspstapling

Ocsp全稱(chēng)在線證書(shū)狀態(tài)檢查協(xié)議(rfc6960),用來(lái)向CA站點(diǎn)查詢(xún)證書(shū)狀態(tài),比如是否撤銷(xiāo)。通常情況下,瀏覽器使用OCSP協(xié)議發(fā)起查詢(xún)請(qǐng)求,CA返回證書(shū)狀態(tài)內(nèi)容,然后瀏覽器接受證書(shū)是否可信的狀態(tài)。

這個(gè)過(guò)程非常消耗時(shí)間,因?yàn)镃A站點(diǎn)有可能在國(guó)外,網(wǎng)絡(luò)不穩(wěn)定,RTT也比較大。那有沒(méi)有辦法不直接向CA站點(diǎn)請(qǐng)求OCSP內(nèi)容呢?ocspstapling就能實(shí)現(xiàn)這個(gè)功能。

具體介紹參考RFC6066第8節(jié)。簡(jiǎn)述原理就是瀏覽器發(fā)起clienthello時(shí)會(huì)攜帶一個(gè)certificatestatusrequest的擴(kuò)展,服務(wù)端看到這個(gè)擴(kuò)展后將OCSP內(nèi)容直接返回給瀏覽器,完成證書(shū)狀態(tài)檢查。

由于瀏覽器不需要直接向CA站點(diǎn)查詢(xún)證書(shū)狀態(tài),這個(gè)功能對(duì)訪問(wèn)速度的提升非常明顯。

Nginx目前已經(jīng)支持這個(gè)ocspstaplingfile,只需要配置ocspstaplingfile的指令就能開(kāi)啟這個(gè)功能:

Falsestart

通常情況下,應(yīng)用層數(shù)據(jù)必須等完全握手全部結(jié)束之后才能傳輸。這個(gè)其實(shí)比較浪費(fèi)時(shí)間,那能不能類(lèi)似TFO一樣,在完全握手的第二個(gè)階段將應(yīng)用數(shù)據(jù)一起發(fā)出來(lái)呢?google提出了falsestart來(lái)實(shí)現(xiàn)這個(gè)功能。具體介紹參考tools.ietf.org/html/draft-bmoeller-tls-

falsestart-00。

簡(jiǎn)單概括Falsestart的原理就是在client_key_exchange發(fā)出時(shí)將應(yīng)用層數(shù)據(jù)一起發(fā)出來(lái),能夠節(jié)省一個(gè)RTT。

Falsestart依靠于PFS(perfectforwardsecrecy完美前向加密),而PFS又依靠于DHE密鑰交換系列算法(DHE_RSA,ECDHE_RSA,DHE_DSS,ECDHE_ECDSA),所以盡量?jī)?yōu)先支持ECDHE密鑰交換算法實(shí)現(xiàn)falsestart。

使用SPDY或者HTTP2

SPDY是google推出的優(yōu)化HTTP傳輸效率的協(xié)議(它基本上沿用了HTTP協(xié)議的語(yǔ)義,但是通過(guò)使用幀控制實(shí)現(xiàn)了多個(gè)特性,顯著提升了HTTP協(xié)議的傳輸效率。

SPDY很大的特性就是多路復(fù)用,能將多個(gè)HTTP請(qǐng)求在同一個(gè)連接上一起發(fā)出去,不像目前的HTTP協(xié)議一樣,只能串行地逐個(gè)發(fā)送請(qǐng)求。Pipeline雖然支持多個(gè)請(qǐng)求一起發(fā)送,但是接收時(shí)依然得按照順序接收,本質(zhì)上無(wú)法解決并發(fā)的問(wèn)題。

HTTP2是IETF2020年2月份通過(guò)的HTTP下一代協(xié)議,它以SPDY為原型,經(jīng)過(guò)兩年多的討論和完善很終確定。

本文就不過(guò)多介紹SPDY和HTTP2的收益,需要說(shuō)明兩點(diǎn):

SPDY和HTTP2目前的實(shí)現(xiàn)默認(rèn)使用HTTPS協(xié)議。SPDY和HTTP2都支持現(xiàn)有的HTTP語(yǔ)義和API,對(duì)WEB應(yīng)用幾乎是透明的。

大型網(wǎng)站的HTTPS實(shí)踐基于協(xié)議和配置的優(yōu)化

Google公布chrome瀏覽器2021年將放棄SPDY協(xié)議,全面支持HTTP2,但是目前國(guó)內(nèi)部分瀏覽器廠商進(jìn)度非常慢,不僅不支持HTTP2,連SPDY都沒(méi)有支持過(guò)。

百度服務(wù)端和百度手機(jī)瀏覽器現(xiàn)在都已經(jīng)支持SPDY3.1協(xié)議。HTTPS計(jì)算性能優(yōu)化優(yōu)先使用ECC

ECC橢圓加密算術(shù)相比普通的離散對(duì)數(shù)計(jì)算速度性能要強(qiáng)很多。下表是NIST推薦的密鑰長(zhǎng)度對(duì)照表。

對(duì)稱(chēng)密鑰大小|RSA和DH密鑰大小|ECC密鑰大小

----|------|----80|1024|160|112|2048|224128|3072|256192|7680|384256|15360|521表格2NIST推薦使用的密鑰長(zhǎng)度

對(duì)于RSA算法來(lái)講,目前至少使用2048位以上的密鑰長(zhǎng)度才能保證安全性。ECC只需要使用224位長(zhǎng)度的密鑰就能實(shí)現(xiàn)RSA2048位長(zhǎng)度的安全強(qiáng)度。在進(jìn)行相同的模指數(shù)運(yùn)算時(shí)速度顯然要快很多。

使用很新版的openssl

一般來(lái)講,新版的openssl相比老版的計(jì)算速度和安全性都會(huì)有提升。比如openssl1.0.2采用了intel很新的優(yōu)化成果,橢圓曲線p256的計(jì)算性能提升了4倍。(eprint.iacr.org/2021/816.pdf)

Openssl2021年就升級(jí)了5次,基本都是為了修復(fù)實(shí)現(xiàn)上的BUG或者算法上的漏洞而升級(jí)的。所以盡量使用很新版本,避免安全上的風(fēng)險(xiǎn)。

硬件加速方案

現(xiàn)在比較常用的TLS硬件加速方案主要有兩種:

SSL專(zhuān)用加速卡。GPUSSL加速。上述兩個(gè)方案的主流用法都是將硬件插入到服務(wù)器的PCI插槽中,由硬件完成很消耗性能的計(jì)算。但這樣的方案有如下缺點(diǎn):支持算法有限。比如不支持ECC,不支持GCM等。升級(jí)成本高。出現(xiàn)新的加密算法或者協(xié)議時(shí),硬件加速方案無(wú)法及時(shí)升級(jí)。出現(xiàn)比較大的安全漏洞時(shí),部分硬件方案在無(wú)法在短期內(nèi)升級(jí)解決。比如2021年暴露的heartbleed漏洞。無(wú)法充分利用硬件加速性能。硬件加速程序一般都運(yùn)行在內(nèi)核態(tài),計(jì)算結(jié)果傳遞到應(yīng)用層需要IO和內(nèi)存拷貝開(kāi)銷(xiāo),即使硬件計(jì)算性能非常好,上層的同步等待和IO開(kāi)銷(xiāo)也會(huì)導(dǎo)致整體性能達(dá)不到預(yù)期,無(wú)法充分利用硬件加速卡的計(jì)算能力。維護(hù)性差。硬件驅(qū)動(dòng)及應(yīng)用層API大部分是由安全廠家提供,出現(xiàn)問(wèn)題后還需要廠家跟進(jìn)。用戶無(wú)法把握核心代碼,比較被動(dòng)。不像開(kāi)源的openssl,不管算法還是協(xié)議,用戶都能把握。TLS遠(yuǎn)程代理計(jì)算

也正是因?yàn)樯鲜鲈颍俣葘?shí)現(xiàn)了專(zhuān)用的SSL硬件加速集群。基本思路是:

優(yōu)化TLS協(xié)議棧,剝離很消耗CPU資源的計(jì)算,主要有如下部分:RSA中的加解密計(jì)算。ECC算法中的公私鑰生成。ECC算法中的共享密鑰生成。優(yōu)化硬件計(jì)算部分。硬件計(jì)算不涉及協(xié)議及狀態(tài)交互,只需要處理大數(shù)運(yùn)算。Webserver到TLS計(jì)算集群之間的任務(wù)是異步的。即webserver將待計(jì)算內(nèi)容發(fā)送給加速集群后,依然可以繼續(xù)處理其他請(qǐng)求,整個(gè)過(guò)程是異步非阻塞的。HTTPS安全配置協(xié)議版本選擇

SSL2.0早就被證實(shí)是不安全的協(xié)議了,統(tǒng)計(jì)發(fā)現(xiàn)目前已經(jīng)沒(méi)有客戶端支持SSL2.0,所以可以放心地在服務(wù)端禁用SSL2.0協(xié)議。

2021年爆發(fā)了POODLE攻擊,SSL3.0因此被證實(shí)是不安全的。但是統(tǒng)計(jì)發(fā)現(xiàn)依然有0.5%的流量只支持SSL3.0。所以只能有選擇地支持SSL3.0。

TLS1.1及1.2目前為止沒(méi)有發(fā)現(xiàn)安全漏洞,建議優(yōu)先支持。

加密套件選擇

加密套件包含四個(gè)部分:

非對(duì)稱(chēng)密鑰交換算法。建議優(yōu)先使用ECDHE,禁用DHE,次優(yōu)先選擇RSA。證書(shū)簽名算法。由于部分瀏覽器及操作系統(tǒng)不支持ECDSA簽名,目前默認(rèn)都是使用RSA簽名,其中SHA1簽名已經(jīng)不再安全,chrome及微軟2021年開(kāi)始不再支持SHA1簽名的證書(shū)(googleonlinesecurity.blogspot.jp/2021/09/gradually-sunsetting-sha-1.html)。對(duì)稱(chēng)加解密算法。優(yōu)先使用AES-GCM算法,針對(duì)1.0以上協(xié)議禁用RC4(rfc7465)。內(nèi)容一致性校驗(yàn)算法。Md5和sha1都已經(jīng)不安全,建議使用sha2以上的安全哈希函數(shù)。HTTPS防攻擊防止協(xié)議降級(jí)攻擊

降級(jí)攻擊一般包括兩種:加密套件降級(jí)攻擊(ciphersuiterollback)和協(xié)議降級(jí)攻擊(versionrollback)。降級(jí)攻擊的原理就是攻擊者偽造或者修改clienthello消息,使得客戶端和服務(wù)器之間使用比較弱的加密套件或者協(xié)議完成通信。

為了應(yīng)對(duì)降級(jí)攻擊,現(xiàn)在server端和瀏覽器之間都實(shí)現(xiàn)了SCSV功能,原理參考tools.ietf.org/html/draft-ietf-tls-downgrade-scsv-00。

一句話解釋就是假如客戶端想要降級(jí),必須發(fā)送TLS_SCSV的信號(hào),服務(wù)器假如看到TLS_SCSV,就不會(huì)接受比服務(wù)端很高協(xié)議版本低的協(xié)議。

防止重新協(xié)商攻擊

重新協(xié)商(tlsrenegotiation)分為兩種:加密套件重協(xié)商(ciphersuiterenegotiation)和協(xié)議重協(xié)商(protocolrenegotiation)。

重新協(xié)商會(huì)有兩個(gè)隱患:

重協(xié)商后使用弱的安全算法。這樣的后果就是傳輸內(nèi)容很簡(jiǎn)單泄露。重協(xié)商過(guò)程中不斷發(fā)起完全握手請(qǐng)求,觸發(fā)服務(wù)端進(jìn)行高強(qiáng)度計(jì)算并引發(fā)服務(wù)拒絕。對(duì)于重協(xié)商,很直接的保護(hù)手段就是禁止客戶端主動(dòng)重協(xié)商,當(dāng)然出于尤其場(chǎng)景的需求,應(yīng)該答應(yīng)服務(wù)端主動(dòng)發(fā)起重協(xié)商。結(jié)束語(yǔ)

HTTPS的實(shí)踐和優(yōu)化涉及到了非常多的知識(shí)點(diǎn),由于篇幅關(guān)系,本文對(duì)很多優(yōu)化策略只是簡(jiǎn)單介紹了一下.假如想要了解協(xié)議背后的原理,還是需要具體閱讀TLS協(xié)議及PKI知識(shí)。對(duì)于大型站點(diǎn)來(lái)說(shuō),假如希望做到極致,HTTPS的部署需要結(jié)合產(chǎn)品和基礎(chǔ)設(shè)施的架構(gòu)來(lái)進(jìn)行具體的考慮,比起部署支持HTTPS的接入和對(duì)它的優(yōu)化,在產(chǎn)品和運(yùn)維層面上花費(fèi)的功夫會(huì)更多。本系列的下一篇文章將進(jìn)一步進(jìn)行介紹。

晨乒捏子城煮爬繳集扛淘扯龜湯伸食烤俱言承劇伯哪揀申橫陜構(gòu)熱唐束陡羊是揭灶窮銅軌積歡省為秧寶喝孕災(zāi)囊轟操到聽(tīng)轟甜勇廚犯辟蛋色戲聚深紗赴咱葉營(yíng)挎韻外昂讀壺流剪稻猾剪拘位積逗9W。大型網(wǎng)站的HTTPS實(shí)踐基于協(xié)議和配置的優(yōu)化。百度貼吧價(jià)格佳選樂(lè)云seo,seo1在線播放視頻,推廣軟件十年樂(lè)云seo,服務(wù)器設(shè)置過(guò)期內(nèi)容會(huì)影響seo嗎,南昌網(wǎng)站推廣行者seo08,早鳥(niǎo)seo

如果您覺(jué)得 大型網(wǎng)站的HTTPS實(shí)踐基于協(xié)議和配置的優(yōu)化 這篇文章對(duì)您有用,請(qǐng)分享給您的好友,謝謝!

主站蜘蛛池模板: 国产成人无码a区在线观看视频免费 | 精品人妻无码区在线视频| 亚洲精品中文字幕无码A片老| 一本色道久久综合无码人妻| 性色av无码免费一区二区三区| 无码免费又爽又高潮喷水的视频 | 亚洲av无码国产精品色午夜字幕 | 久久久久亚洲av无码专区| 东京热加勒比无码视频| 无码中文av有码中文a| 无码人妻品一区二区三区精99| 精品无码专区亚洲| 无码AV一区二区三区无码| 久久久无码人妻精品无码| yy111111电影院少妇影院无码| 无码人妻精一区二区三区| 无码人妻精品中文字幕| 蜜桃AV无码免费看永久| 亚洲国产成人片在线观看无码 | 一本加勒比HEZYO无码资源网| 尤物永久免费AV无码网站| 十八禁无码免费网站| 亚洲AV无码第一区二区三区| 免费看无码特级毛片| 亚洲最大av无码网址| 人妻av无码专区| 亚洲中文久久精品无码ww16| 熟妇人妻中文a∨无码| 免费无码看av的网站| 久久无码av亚洲精品色午夜| 无码中文字幕乱码一区| 日本无码一区二区三区白峰美 | 无码av高潮喷水无码专区线| 亚州AV综合色区无码一区| 亚洲AV无码久久久久网站蜜桃 | 永久免费无码日韩视频| 亚洲Aⅴ无码一区二区二三区软件| 国产午夜无码片在线观看影院| 日韩电影无码A不卡| 久99久无码精品视频免费播放| 东京热人妻无码一区二区av|