1、前言

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

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

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

數(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 和

網(wǎng)友評(píng)論