、前言

   最近工作涉及到https,需要修改nginx的openssl模塊,引入keyless方案。關(guān)于keyless可以參考CloudFlare的官方博客:

https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/?utm_source=tuicool&utm_medium=referral。

在openssl的基礎(chǔ)上修改私鑰校驗過程,因此需要對openssl的認(rèn)證認(rèn)證流程需要熟悉一下。SSL中涉及到很多概念,開始都不清楚,例如CA,數(shù)字簽名、數(shù)字證書等,本文主要是總結(jié)SSL認(rèn)證的基礎(chǔ)知識,openssl的單向和雙向認(rèn)證流程,并寫代碼測試。

2、基礎(chǔ)知識

  SSL:Secure Socket Layer,安全套接字層,它位于TCP層與Application層之間。提供對Application數(shù)據(jù)的加密保護(hù)(密文),完整性保護(hù)(不被篡改)等安全服務(wù),它缺省工作在TCP 443 端口,一般對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

  公鑰:大家公用的,可以通過電子郵件發(fā)布,通過網(wǎng)站讓別人下載,公鑰其用來加密和驗章。

  私鑰:就是自己的私有的,必須非常小心保存,最好加上 密碼,私鑰是用來解密和簽章。

  數(shù)字簽名:將報文按雙方約定的HASH算法計算得到一個固定位數(shù)的報文摘要。在數(shù)學(xué)上保證:只要改動報文中任何一位,重新計算出的報文摘要值就會與原先的值不相符。這樣就保證了報文的不可更改性。將該報文摘要值用發(fā)送者的私人密鑰加密,然后連同原報文一起發(fā)送給接收者,而產(chǎn)生的報文即稱數(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ù)字證書就是互聯(lián)網(wǎng)通訊中標(biāo)志通訊各方身份信息的一系列數(shù)據(jù),提供了一種在Internet上驗證您身份的方式,其作用類似于司機的駕駛執(zhí)照或日常生活中的身份證。它是由一個由權(quán)威機構(gòu)-----CA機構(gòu),又稱為證書授權(quán)(Certificate Authority)中心發(fā)行的,人們可以在網(wǎng)上用它來識別對方的身份。數(shù)字證書是一個經(jīng)證書授權(quán)中心數(shù)字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件。最簡單的證書包含一個公開密鑰、名稱以及證書授權(quán)中心的數(shù)字簽名。<