什么是TLS
TLS其實(shí)是SSL,可能更正式的說法已經(jīng)不用SSL了。TLS是一套基于非對(duì)稱加密算法的安全傳輸協(xié)議,更嚴(yán)格來說缘薛,TLS先是通過非對(duì)稱加密方式交換對(duì)稱加密秘鑰,然后采用對(duì)稱加密算法進(jìn)行安全傳輸卡睦。
非對(duì)稱加密是這樣的一把鎖宴胧,有兩把鑰匙,任意一把鑰匙可以把鎖鎖上表锻,只有另一把鑰匙才能將鎖打開恕齐。這兩把鑰匙是成對(duì)的,可以互相解密瞬逊。其中一把是公開的公鑰显歧,另一把是服務(wù)器持有的私鑰。
任何人都可以用公鑰加密一段消息發(fā)送給服務(wù)器确镊,做到安全發(fā)送士骤。另一方面,服務(wù)器可以用私鑰加密一段消息骚腥,將消息明文和密文發(fā)送給接收者,以此證明自己的真實(shí)身份瓶逃,這叫做簽名束铭。當(dāng)然,現(xiàn)實(shí)中厢绝,是對(duì)消息的摘要進(jìn)行簽名加密契沫,因?yàn)檎容^小。
證書和CA
TLS的第一步昔汉,就是讓發(fā)送者持有服務(wù)器的公鑰懈万。通常獲得服務(wù)器公鑰的方式,都是向服務(wù)器進(jìn)行詢問,然后由服務(wù)器明文發(fā)送過來的会通。為了保證這一步的安全性口予,確保明文發(fā)送過來的公鑰沒有被串改,我們又發(fā)明了證書涕侈。
證書由服務(wù)器名稱信息和服務(wù)器公鑰組成沪停,然后加上證書簽發(fā)機(jī)構(gòu)CA和簽發(fā)機(jī)構(gòu)對(duì)前面信息的簽名。改用證書機(jī)制后裳涛,服務(wù)器以明文發(fā)送自己的證書信息木张,使用者用CA的公鑰驗(yàn)證證書簽名,核對(duì)相關(guān)的服務(wù)器信息端三,然后就可以信任服務(wù)器的公鑰了舷礼。
至于CA公鑰的傳遞方式,一般是內(nèi)置的或者通過實(shí)體進(jìn)行傳遞郊闯。
單向認(rèn)證和雙向認(rèn)證
一般服務(wù)器是不限制使用者訪問的妻献,所以服務(wù)器配置了證書和私鑰,讓發(fā)送者能夠安全的從第一步開始建立加密通信機(jī)制虚婿。即使使用者不驗(yàn)證服務(wù)器證書旋奢,TLS仍舊是以加密方式進(jìn)行,雖然安全度不是最高然痊,但是屏蔽掉無聊的阿貓阿狗訪問已經(jīng)足夠了至朗。
更進(jìn)一步,服務(wù)器可以配置雙向認(rèn)證剧浸,配置CA證書并要求認(rèn)證使用者的證書锹引。那么使用者在訪問前就要配置由CA簽發(fā)的個(gè)人證書和私鑰,在第一步開始時(shí)把自己的證書和隨機(jī)簽名發(fā)過去讓服務(wù)器進(jìn)行認(rèn)證唆香。
使用雙向認(rèn)證的時(shí)候嫌变,通信的安全性已經(jīng)足夠高了:消息是加密的,并且不太容易在某個(gè)環(huán)節(jié)被串改躬它,而使用者必須經(jīng)過服務(wù)器用自己的CA簽發(fā)授權(quán)證書后才能訪問服務(wù)腾啥。
平時(shí)如何運(yùn)用TLS
TLS的運(yùn)用其實(shí)應(yīng)該非常廣,只要不是內(nèi)網(wǎng)服務(wù)冯吓,而是向不安全的互聯(lián)網(wǎng)公開的服務(wù)倘待,并且在通信上沒有使用任何加密手段,也沒有特別有效的客戶鑒權(quán)组贺,都應(yīng)該使用TLS凸舵。
比如有時(shí)候因?yàn)槟撤N原因,不得不向互聯(lián)網(wǎng)暴露mysql失尖,redis或者其他開源軟件的服務(wù)端口啊奄,這種大作死的行為渐苏,軟件自帶的脆弱的客戶鑒權(quán)機(jī)制就跟雜草一樣一踩就倒,已經(jīng)是業(yè)界人盡皆知的情形菇夸。
如果能為這些開放的服務(wù)端口加上TLS雙向認(rèn)證通信琼富,基本能把侵害排除99%了吧。那如何給這些服務(wù)增加TLS安全通信呢峻仇?
首先公黑,把公開的服務(wù)改成內(nèi)網(wǎng)服務(wù)。
第二摄咆,在服務(wù)器和客戶端之間配置TLS tunnel凡蚜,通過tunnel轉(zhuǎn)發(fā)客戶端和服務(wù)器之間流量。有很多TLS tunnel客戶端可以使用吭从,這種方式也不會(huì)對(duì)原系統(tǒng)造成任何改動(dòng)朝蜘,所謂各司其職。