2021-04-02 分類: 網(wǎng)站建設(shè)
一、理解https
先不聊http和https的區(qū)別,從聊天軟件說(shuō)起,假設(shè)我們要實(shí)現(xiàn)a能發(fā)一個(gè)hello消息給b,如果我們要實(shí)現(xiàn)這個(gè)聊天軟件,只考慮安全性問(wèn)題,要實(shí)現(xiàn)a發(fā)給b的hello消息包,即使被中間人攔截到了,也無(wú)法得知消息的內(nèi)容。
那么,如何做到真正的安全呢?目標(biāo)是a與b通信的內(nèi)容,有且只有a和b有能力看到通信的真正內(nèi)容,為了防止內(nèi)容被第三方竊取,發(fā)送方可以通過(guò)密鑰s對(duì)聊天內(nèi)容進(jìn)行加密,接收方在收到聊天內(nèi)容之后,再用密鑰s解密聊天內(nèi)容,只要密鑰不公開(kāi)給第三者,同時(shí)密鑰s足夠安全,我們就可以保證只有a與b知道聊天內(nèi)容。
二、https的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
制作方面:谷歌曾在2014年8月份調(diào)整搜索引擎算法,并稱“比起同等http網(wǎng)站,采用https加密的網(wǎng)站在搜索結(jié)果中的排名將會(huì)更高”。
安全性:盡管https并非絕對(duì)安全,掌握根證書(shū)的機(jī)構(gòu)、掌握加密算法的組織同樣可以進(jìn)行中間人形式的攻擊,但https仍是現(xiàn)行架構(gòu)下最安全的解決方案,主要有以下幾個(gè)好處:
使用https協(xié)議可認(rèn)證用戶和服務(wù)器,確保數(shù)據(jù)發(fā)送到正確的客戶機(jī)和服務(wù)器;
https協(xié)議是由ssl+http協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,要比http協(xié)議安全,可防止數(shù)據(jù)在傳輸過(guò)程中不被竊取、改變,確保數(shù)據(jù)的完整性;
https是現(xiàn)行架構(gòu)下最安全的解決方案,雖然不是絕對(duì)安全,但它大幅增加了中間人攻擊的成本。
缺點(diǎn)
制作方面:據(jù)acm conext數(shù)據(jù)顯示,使用https協(xié)議會(huì)使頁(yè)面的加載時(shí)間延長(zhǎng)近50%,增加10%到20%的耗電,此外,https協(xié)議還會(huì)影響緩存,增加數(shù)據(jù)開(kāi)銷和功耗,甚至已有安全措施也會(huì)受到影響也會(huì)因此而受到影響。
經(jīng)濟(jì)方面:ssl證書(shū)需要錢,功能越強(qiáng)大的證書(shū)費(fèi)用越高,個(gè)人網(wǎng)站、小網(wǎng)站沒(méi)有必要一般不會(huì)用;
https連接緩存不如http高效,大流量網(wǎng)站如非必要也不會(huì)采用,流量成本太高;
https連接服務(wù)器端資源占用高很多,支持訪客稍多的網(wǎng)站需要投入更大的成本,如果全部采用https,基于大部分計(jì)算資源閑置的假設(shè)的vps的平均成本會(huì)上去;
https協(xié)議握手階段比較費(fèi)時(shí),對(duì)網(wǎng)站的相應(yīng)速度有負(fù)面影響,如非必要,沒(méi)有理由犧牲用戶體驗(yàn)。
三、支持https的方式
增加https的支持需要在nginx或者tomcat上增加證書(shū)(證書(shū)需要ops來(lái)購(gòu)買),兩種方法只需要選用其中一種。我們選擇了通過(guò)nginx配置證書(shū)的方式來(lái)做https支持的事情。原因是這種方式可以通過(guò)ops統(tǒng)一配置證書(shū),不需要在每臺(tái)服務(wù)器上依次配置https證書(shū),能提升配置效率。
通過(guò)tomcat配置證書(shū)
在開(kāi)發(fā)環(huán)境里時(shí),需要自己來(lái)生成證書(shū):1、生成證書(shū);2、找到j(luò)ava的目錄;3、生成一個(gè)證書(shū)。
keytool -v-genkey -alias tomcat -keyalg rsa -keystore ~/keystore
記住生成證書(shū)時(shí)的密碼
在tomcat的conf/server.xml 配置里增加connector
譬如,我的是server.xml
maxthreads="150" minsparethreads="25" maxsparethreads="75" enablelookups="true" disableuploadtimeout="true" acceptcount="100" debug="0" scheme="https" secure="true" clientauth="false" sslprotocol="tls" keystorepass="121212" ---- 這個(gè)是您當(dāng)時(shí)的密碼 sslenabled="true" keystorefile="/home/q/keystore" -- 這個(gè)您第二步時(shí),生成證書(shū)的地址 /> 使用這種方法,直接用request.getschmeme()能夠看到https 通過(guò)nginx配置證書(shū) 在已經(jīng)購(gòu)買好證書(shū)的前提下,可以通過(guò)以下方式配置證書(shū)。 nginx配置 server { listen 443; server_name dujia.qunar.com; charset utf8; gzip off; ssl on; ssl_certificate/home/q/nginx/ssl/server.crt; ssl_certificate_key/home/q/nginx/ssl/server.key; if ( $request_method !~ get|post|head ) { return 403; } proxy_set_header host "dujia.qunar.com"; proxy_set_header x-real-ip$remote_addr; proxy_set_header x-forwarded-for$proxy_add_x_forwarded_for; proxy_set_header dj-sch "https"; proxy_set_header x-real-scheme $scheme; location / { proxy_pass http://127.0.0.1:80; #proxy_pass http://p.tuan.qunar.com; } } 在java中通過(guò)x-real-scheme或dj-sch獲取當(dāng)前協(xié)議 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; } } 四、代碼涉及的改動(dòng) 頁(yè)面請(qǐng)求的靜態(tài)資源 js && css 后臺(tái)將jsp中域名為http://*.quanrzz.com 的js,css鏈接改為 //*.qunarzz.com
圖片
將jsp和java工程中給出的圖片url進(jìn)行修改(原因是當(dāng)前實(shí)用的圖片服務(wù)器不能同時(shí)支持http和https),圖片的http和https域名對(duì)應(yīng)關(guān)系如下:
接口
內(nèi)部接口:修改接口返回的url,統(tǒng)一格式為://xxx.xx.xx/;
圖片url會(huì)根據(jù)服務(wù)請(qǐng)求端的協(xié)議做自適應(yīng),比如:用戶以https協(xié)議請(qǐng)求服務(wù),接口返回的圖片url對(duì)應(yīng)的協(xié)議也是https。圖片url不以“//xxx.xx.xx/”形式返回的原因是android和ios默認(rèn)不支持展示不帶協(xié)議的圖片。
外部接口:當(dāng)調(diào)用其他業(yè)務(wù)線的一些接口不支持https時(shí),我們的處理方式是通過(guò)代理接口來(lái)調(diào)用這些外部接口。
五、遇到的問(wèn)題及處理方案
nginx上對(duì)443端口的請(qǐng)求在header里添加https標(biāo)記,需要和后端保證一致;
用戶中心個(gè)別的css和js在https環(huán)境下需要在引入時(shí)標(biāo)記css/js=ssl;
同一個(gè)域名下面,部分內(nèi)部調(diào)用的接口,是不需要支持https的,因此在做nginx轉(zhuǎn)發(fā)的時(shí)候,需要針對(duì)這些uri做特殊處理。
分享名稱:https改造分享
本文鏈接:http://jinyejixie.com/news/106303.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、小程序開(kāi)發(fā)、網(wǎng)站收錄、動(dòng)態(tài)網(wǎng)站、做網(wǎng)站、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容