、前言
最近工作涉及到https,需要修改nginx的openssl模塊,引入keyless方案。關(guān)于keyless可以參考CloudFlare的官方博客:
在openssl的基礎(chǔ)上修改私鑰校驗(yàn)過(guò)程,因此需要對(duì)openssl的認(rèn)證認(rèn)證流程需要熟悉一下。SSL中涉及到很多概念,開(kāi)始都不清楚,例如CA,數(shù)字簽名、數(shù)字證書(shū)等,本文主要是總結(jié)SSL認(rèn)證的基礎(chǔ)知識(shí),openssl的單向和雙向認(rèn)證流程,并寫(xiě)代碼測(cè)試。
2、基礎(chǔ)知識(shí)
SSL:Secure Socket Layer,安全套接字層,它位于TCP層與Application層之間。提供對(duì)Application數(shù)據(jù)的加密保護(hù)(密文),完整性保護(hù)(不被篡改)等安全服務(wù),它缺省工作在TCP 443 端口,一般對(duì)HTTP加密,即俗稱的HTTPS。
TLS:Transport Layer Secure,更關(guān)注的是提供安全的傳輸服務(wù),它很靈活,如果可能,它可以工作在TCP,也可以UDP (DTLS),也可以工作在數(shù)據(jù)鏈路層,比如802.1x EAP-TLS。
關(guān)于SSL/TSL可以參考:http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
公鑰:大家公用的,可以通過(guò)電子郵件發(fā)布,通過(guò)網(wǎng)站讓別人下載,公鑰其用來(lái)加密和驗(yàn)章。
私鑰:就是自己的私有的,必須非常小心保存,最好加上 密碼,私鑰是用來(lái)解密和簽章。
數(shù)字簽名:將報(bào)文按雙方約定的HASH算法計(jì)算得到一個(gè)固定位數(shù)的報(bào)文摘要。在數(shù)學(xué)上保證:只要改動(dòng)報(bào)文中任何一位,重新計(jì)算出的報(bào)文摘要值就會(huì)與原先的值不相符。這樣就保證了報(bào)文的不可更改性。將該報(bào)文摘要值用發(fā)送者的私人密鑰加密,然后連同原報(bào)文一起發(fā)送給接收者,而產(chǎn)生的報(bào)文即稱數(shù)字簽名。關(guān)于數(shù)字簽名參考:http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html 和http://www.youdzone.com/signature.html
數(shù)字證書(shū):數(shù)字證書(shū)就是互聯(lián)網(wǎng)通訊中標(biāo)志通訊各方身份信息的一系列數(shù)據(jù),提供了一種在Internet上驗(yàn)證您身份的方式,其作用類(lèi)似于司機(jī)的駕駛執(zhí)照或日常生活中的身份證。它是由一個(gè)由權(quán)威機(jī)構(gòu)-----CA機(jī)構(gòu),又稱為證書(shū)授權(quán)(Certificate Authority)中心發(fā)行的,人們可以在網(wǎng)上用它來(lái)識(shí)別對(duì)方的身份。數(shù)字證書(shū)是一個(gè)經(jīng)證書(shū)授權(quán)中心數(shù)字簽名的包含公開(kāi)密鑰擁有者信息以及公開(kāi)密鑰的文件。最簡(jiǎn)單的證書(shū)包含一個(gè)公開(kāi)密鑰、名稱以及證書(shū)授權(quán)中心的數(shù)字簽名。<