【大拿分享】去哪兒網https改造分享

https大大改善了網站的安全性,減少了流量劫持,越安全的網站對用戶越有益。即便是https改造有些難度,也應當大力推進https的改造。下面我們特邀了去哪網的同學進行了關於https改造的分享!

本文作者:去哪兒高級工程師 歐陽何順、去哪兒網SEO負責人 呂令建

 一、理解HTTPS

先不聊HTTP和HTTPS的區別,從聊天軟體說起,假設我們要實現A能發一個hello消息給B,如果我們要實現這個聊天軟體,只考慮安全性問題,要實現A發給B的hello消息包,即使被中間人攔截到了,也無法得知消息的內容。

【大拿分享】去哪兒網https改造分享

那麼,如何做到真正的安全呢?目標是A與B通信的內容,有且只有A和B有能力看到通信的真正內容,為了防止內容被第三方竊取,發送方可以通過密鑰S對聊天內容進行加密,接收方在收到聊天內容之後,再用密鑰S解密聊天內容,只要密鑰不公開給第三者,同時密鑰S足夠安全,我們就可以保證只有A與B知道聊天內容。

【大拿分享】去哪兒網https改造分享

二、HTTPS的優缺點

優點 

SEO方面:谷歌曾在2014年8月份調整搜索引擎演算法,並稱「比起同等HTTP網站,採用HTTPS加密的網站在搜索結果中的排名將會更高」。

安全性:儘管HTTPS並非絕對安全,掌握根證書的機構、掌握加密演算法的組織同樣可以進行中間人形式的攻擊,但HTTPS仍是現行架構下最安全的解決方案,主要有以下幾個好處:

使用HTTPS協議可認證用戶和伺服器,確保數據發送到正確的客戶機和伺服器;

HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,要比http協議安全,可防止數據在傳輸過程中不被竊取、改變,確保數據的完整性;

HTTPS是現行架構下最安全的解決方案,雖然不是絕對安全,但它大幅增加了中間人攻擊的成本。

缺點 

SEO方面:據ACM CoNEXT數據顯示,使用HTTPS協議會使頁面的載入時間延長近50%,增加10%到20%的耗電,此外,HTTPS協議還會影響緩存,增加數據開銷和功耗,甚至已有安全措施也會受到影響也會因此而受到影響。

經濟方面:SSL證書需要錢,功能越強大的證書費用越高,個人網站、小網站沒有必要一般不會用;

HTTPS連接緩存不如HTTP高效,大流量網站如非必要也不會採用,流量成本太高;

HTTPS連接伺服器端資源佔用高很多,支持訪客稍多的網站需要投入更大的成本,如果全部採用HTTPS,基於大部分計算資源閑置的假設的VPS的平均成本會上去;

HTTPS協議握手階段比較費時,對網站的相應速度有負面影響,如非必要,沒有理由犧牲用戶體驗。

三、支持HTTPS的方式

增加HTTPS的支持需要在nginx或者tomcat上增加證書(證書需要ops來購買),兩種方法只需要選用其中一種。我們選擇了通過nginx配置證書的方式來做HTTPS支持的事情。原因是這種方式可以通過ops統一配置證書,不需要在每台伺服器上依次配置HTTPS證書,能提升配置效率。

通過tomcat配置證書

在開發環境里時,需要自己來生成證書:1、生成證書;2、找到java的目錄;3、生成一個證書。

  • keytool -v-genkey -alias tomcat -keyalg RSA -keystore ~/keystore

記住生成證書時的密碼

在tomcat的conf/server.xml 配置里增加connector

譬如,我的是server.xml

  •     <Connector port="8443"

  •                maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

  •                enableLookups="true" disableUploadTimeout="true"

  •                acceptCount="100" debug="0" scheme="https" secure="true"

  •                clientAuth="false" sslProtocol="TLS"

  •                keystorePass="121212"  —- 這個是您當時的密碼

  •                SSLEnabled="true"

  •                keystoreFile="/home/q/keystore" — 這個您第二步時,生成證書的地址

  •                />

使用這種方法,直接用request.getSchmeme()能夠看到https

通過nginx配置證書

在已經購買好證書的前提下,可以通過以下方式配置證書。

nginx配置

  • server POST

在java中通過X-Real-Scheme或dj-sch獲取當前協議

SchemeUtil.java

  •     private static String HTTPS_HEADER = "X-Real-Scheme";

  •     private static String HTTPS_SCHEME = "https";

  •     private static String HTTP_SCHEME = "http";

  •     public static String getScheme(HttpServletRequest request)

  •         String scheme = request.getHeader(HTTPS_HEADER);

  •         if(scheme != null &&scheme.equals(HTTPS_SCHEME))

  •             return HTTPS_SCHEME;

  •         else

  •             return HTTP_SCHEME;

  •        

  •    

四、代碼涉及的改動

頁面請求的靜態資源

js && css

後台將jsp中域名為http://*.quanrzz.com 的js,css鏈接改為 //*.qunarzz.com

圖片

將jsp和java工程中給出的圖片url進行修改(原因是當前實用的圖片伺服器不能同時支持http和https),圖片的http和https域名對應關係如下:

【大拿分享】去哪兒網https改造分享

介面

內部介面:修改介面返回的url,統一格式為://xxx.xx.xx/;

圖片url會根據服務請求端的協議做自適應,比如:用戶以https協議請求服務,介面返回的圖片url對應的協議也是https。圖片url不以「//xxx.xx.xx/」形式返回的原因是android和ios默認不支持展示不帶協議的圖片。

外部介面:當調用其他業務線的一些介面不支持https時,我們的處理方式是通過代理介面來調用這些外部介面。

五、遇到的問題及處理方案

nginx上對443埠的請求在header里添加https標記,需要和後端保證一致;

用戶中心個別的css和js在https環境下需要在引入時標記css/js=ssl;

同一個域名下面,部分內部調用的介面,是不需要支持https的,因此在做nginx轉發的時候,需要針對這些uri做特殊處理。

註:相關網站建設技巧閱讀請移步到建站教程頻道。

轉載文章請附上來源:【大拿分享】去哪兒網https改造分享Whoops SEO 搜尋引擎優化 – Search Engine Optimization

Source: http://seo.techroomage.com/%e3%80%90%e5%a4%a7%e6%8b%bf%e5%88%86%e4%ba%ab%e3%80%91%e5%8e%bb%e5%93%aa%e5%85%92%e7%b6%b2https%e6%94%b9%e9%80%a0%e5%88%86%e4%ba%ab/

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s