SSL/TLS協(xié)議及Openssl工具的實(shí)現(xiàn)

前言

早期互聯(lián)網(wǎng)數(shù)據(jù)傳輸是基于TCP/IP模型完成數(shù)據(jù)交換,其各層對(duì)傳輸?shù)臄?shù)據(jù)包進(jìn)行各協(xié)議的封裝,從數(shù)據(jù)的發(fā)送方到接收方進(jìn)行的數(shù)據(jù)交換都是基于明文傳輸。在傳輸?shù)倪^(guò)程中數(shù)據(jù)的可以被中間人進(jìn)行攔截或抓取,威脅了數(shù)據(jù)的保密性(竊聽(tīng)、通信量分析)、數(shù)據(jù)的完整性(更改、偽裝、重放、否認(rèn))、數(shù)據(jù)的可用性攻擊(拒絕服務(wù)DOS及DDOS)。為了了達(dá)到安全,出現(xiàn)了技術(shù)的解決方案:加密和解密來(lái)抵御攻擊。

加密和解密算法和協(xié)議

1、對(duì)稱加密:

  • 特性:
    • 1、加密和解密使用同一密鑰,但雙方加密算法可以不同
    • 2、將原始數(shù)據(jù)分割成固定大小塊,逐個(gè)進(jìn)行加密
    • 3、加解密速度比較快
  • 缺點(diǎn):
    • 1、密鑰過(guò)多
    • 2、密鑰分發(fā)困難
  • 用途:
    • 常見(jiàn)用于數(shù)據(jù)傳輸過(guò)程中的數(shù)據(jù)加密,
  • 常見(jiàn)算法:
    • DES : Data ,基于64位明文產(chǎn)生64個(gè)密文,或者64位密文產(chǎn)生64位明文
    • 3DES: triple DES
    • AES : advanced Encryption standard,采用128、192、256、384位加密機(jī)制
    • Blowfish
    • Twofish
    • IDEA
    • RC16
    • CAST5

2、非對(duì)稱加密(公鑰加密)

  • 特性:
    • 1、密鑰分為公鑰和私鑰,密碼都是成對(duì)出現(xiàn)。
    • 2、私鑰可以解公鑰加密的數(shù)據(jù),公鑰也可以解私鑰加密的數(shù)據(jù)
    • 3、公鑰從私鑰中提取產(chǎn)生,可以公開(kāi)給所有人,稱之為Public Key
    • 4、私鑰通過(guò)工具創(chuàng)建,使用者自己留存,必須保證其私密性,稱之為Secret Key
  • 缺點(diǎn)
    • 加解密速度慢,一般比對(duì)稱加密要慢3個(gè)量級(jí)(一個(gè)量級(jí)是10倍)
    • 中間人攻擊
  • 用途
    • 1、數(shù)字簽名
      • 主要用于讓接收方確認(rèn)發(fā)送方的身份
    • 2、密鑰交換
      • 發(fā)送方使用公鑰加密一個(gè)對(duì)稱密鑰,并發(fā)送給對(duì)方
    • 3、數(shù)據(jù)加密
數(shù)字簽名及密鑰交換過(guò)程說(shuō)明:
  • 1、發(fā)送方使用單向加密算法計(jì)算數(shù)據(jù)的特征碼,用其私鑰加密特征碼,并附加在數(shù)據(jù)后面,
  • 2、發(fā)送方再使用對(duì)稱加密算法生成密鑰,加密整個(gè)數(shù)據(jù),并拿到對(duì)方的公鑰,加密對(duì)稱加密的密碼,發(fā)送給對(duì)方
  • 3、對(duì)方收到后使用自己的私鑰解密,拿到對(duì)稱加密算法的密碼,再使用密碼解密整個(gè)數(shù)據(jù)。

身份驗(yàn)證機(jī)制的實(shí)現(xiàn):發(fā)送方使用自己的私鑰加密數(shù)據(jù)后,接收方拿對(duì)方發(fā)布的公鑰解密其數(shù)據(jù),這個(gè)過(guò)程被稱之為身份驗(yàn)證

密鑰交換機(jī)制的實(shí)現(xiàn): 發(fā)送方使用對(duì)方的公鑰加密其密碼,接收方使用自己的私鑰解密后可以得到其密碼,這個(gè)過(guò)程被稱之為密鑰交換

  • 常見(jiàn)算法
    • RSA : 能同時(shí)實(shí)現(xiàn)加密解密
    • DSS : Digital signarure standard
    • DSA : 只能實(shí)現(xiàn)簽名,不能實(shí)現(xiàn)加解密

3、單向加密

  • 特性:
    • 1、定長(zhǎng)輸出
    • 2、雪崩效應(yīng)
    • 3、只加密不能解密
  • 用途:
    • 實(shí)現(xiàn)數(shù)據(jù)的完整性驗(yàn)證
  • 常見(jiàn)算法:
    • MD5 : message digest5,固定128位的定長(zhǎng)輸出
    • sha1 : secure hash algorithm ,固定160位的定長(zhǎng)輸出
    • sha224,sha256,sha384,sha512

密鑰交換機(jī)制(IKE ,Internet Key Exchange)

  • 實(shí)現(xiàn)算法:

    • RSA
    • ECDH(隨圓曲線DH)
    • ECDHE(臨時(shí)隨圓曲線DH)
    • 公鑰加密
    • DH(deffie-hellman)
  • DH交換密鑰的實(shí)現(xiàn)原理
      A: p,g (生成兩個(gè)大數(shù))
      B: p,g(生成兩個(gè)大數(shù))
      
      A: x(生成一個(gè)隨機(jī)數(shù))
          --> p^x%g ---->(發(fā)送給B)
      B: y(生成一個(gè)隨機(jī)數(shù))
          -->p^y%g ----> (發(fā)送給A)
          
      A:(p^y%g)^x == p^yx%g 
      B: (p^x%g) ^y == p^xy%g(算得的密碼都一樣)
    

為什么會(huì)有CA機(jī)構(gòu)的出現(xiàn)

由于基于公鑰和私鑰機(jī)制進(jìn)行密鑰交換時(shí),會(huì)有中間人攻擊的情況發(fā)生。故我們需要有一個(gè)第三方機(jī)構(gòu)幫忙認(rèn)證證書(shū)的真實(shí)性,不會(huì)被第三方利用。這個(gè)情況下,出現(xiàn)了簽證機(jī)構(gòu),即CA。

CA頒發(fā)證書(shū)的機(jī)制

  • 1、客戶生成相應(yīng)的私鑰,并提取公鑰
  • 2、向CA機(jī)構(gòu)發(fā)送申請(qǐng)信息,其中需要提供主體名稱、主體公鑰、主體的唯一標(biāo)識(shí),生成一個(gè)簽署請(qǐng)求文件。
  • 3、CA機(jī)構(gòu)對(duì)其提供的請(qǐng)求文件提取特征碼,使用自己的私鑰對(duì)特征碼簽名,生成證書(shū)(證書(shū)中包含信息請(qǐng)見(jiàn)以下)

PKI(Public infrastructure,公鑰基礎(chǔ)設(shè)施)

  • 四個(gè)組件組成
    • 簽證機(jī)構(gòu) : CA
    • 注冊(cè)機(jī)構(gòu) : RA
    • 證書(shū)吊銷列表 : CRL
    • 證書(shū)存取庫(kù) : CB
  • 證書(shū)的基本格式(X.509標(biāo)準(zhǔn))
    • 1、證書(shū)序列號(hào)
    • 2、序列號(hào)
    • 3、簽名算法ID
    • 4、發(fā)行者名稱
    • 5、有效期限
    • 6、主體名稱
    • 7、主體公鑰
    • 8、發(fā)行者的唯一標(biāo)識(shí)
    • 9、主體的唯一標(biāo)識(shí)
    • 10、擴(kuò)展
    • 11、發(fā)行者的簽名

加密通信的實(shí)現(xiàn)協(xié)議

  • SSL (Secure socket layer)

由網(wǎng)景公司研發(fā),SSL協(xié)議位于TCP/IP協(xié)議與各種應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持。SSL協(xié)議可分為兩層:SSL記錄協(xié)議(SSL Record Protocol):它建立在可選的傳輸協(xié)議(如TCP)之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密等基本功能的支持。SSL握手協(xié)議(SSL Handshake Protocol),它建立在SSL記錄協(xié)議之上, 用于在實(shí)際的數(shù)據(jù)傳輸之前,通訊雙方進(jìn)行身份認(rèn)證、協(xié)商加密算法、交換加密密鑰等
* ######協(xié)議版本
* V1.0
* V1.2
* V3.0

  • TLS (Transport layer security)

TLS是開(kāi)源SSL的實(shí)現(xiàn),由IETF公司于1999年發(fā)布,其支持多種算法。TLS彩分層設(shè)計(jì):
* 最底層:基礎(chǔ)算法原語(yǔ)的實(shí)現(xiàn),AES,RSA,MD5
* 向上一層: 各種算法的實(shí)現(xiàn)
* 再向上一層: 組合算法實(shí)現(xiàn)的半成品
* 再向上:用于各種組件拼裝而成的各種成品密碼學(xué)協(xié)議軟件

    * 協(xié)議版本:
        * V1.0 
        * V1.1
        * V1.2(目前主流版本)
        * V1.3

Handshake握手過(guò)程(無(wú)需驗(yàn)證客戶端證書(shū))

動(dòng)作 發(fā)送方
Client hello Client
(2)Server Hello Server
(3)Certificate Server
(4)Server hello done Server
(5)Client Key Exchange Client
(6)Change cipher spec Client
(7)Finished Client
(8)Change cipher spec Server
(9)Finished Server
  • 1、TLS客戶端通過(guò)Client Hello消息發(fā)送所支持的TLS版本、加密算法、壓縮算法、密鑰交換算法、MAC算法等信息發(fā)送給TLS服務(wù)端
  • 2、TLS服務(wù)端確認(rèn)本次通信采用TLS版本加密通信,并通過(guò)Server Hello消息通知SSL客戶端,并將自己的公鑰信息的數(shù)字證書(shū)發(fā)送給TLS客戶端
  • 3、服務(wù)端發(fā)送Server hello Done消息,通知客戶端版本和加密套件協(xié)商結(jié)束,開(kāi)媽進(jìn)行密鑰交換
  • 4、客戶端驗(yàn)證服務(wù)端的證書(shū)合法性后,利用證書(shū)中的公鑰加密客戶端隨機(jī)生成的premaster secret(隨機(jī)數(shù)字做為密碼),發(fā)送給服務(wù)端
  • 5、客戶端發(fā)送Change cipher spec消息,通知服務(wù)端后續(xù)采用協(xié)議商好密鑰和加密方法進(jìn)行加密和MAC計(jì)算
  • 6、客戶端計(jì)算已交互的所有握手信息(除Change cipher spec消息)進(jìn)行Hash值計(jì)算,并使用協(xié)商好的密鑰進(jìn)行加密Hash值,并通過(guò)Finished消息發(fā)送給服務(wù)器,服務(wù)端利用同樣的方法計(jì)算已交互的握手消息的Hash值,并與解密的Hash值比較,如果二者相同,則證明密鑰和加密套件協(xié)商成功
  • 7、同樣服務(wù)端也會(huì)發(fā)送Change cipher spec消息,通知客戶端后續(xù)報(bào)文采用協(xié)商好的密碼和加密套件處理Hash值,客戶端利用同樣的方法計(jì)算已交互的握手消息的Hash值,并與之對(duì)比,如果相同則證明密鑰和套件協(xié)商成功

Handshake握手過(guò)程(驗(yàn)證客戶端的證書(shū)過(guò)程)

動(dòng)作 發(fā)送方
Client hello Client
(2)Server Hello Server
(3)Certificate Server
(4)Certificate Request Server
(5)Server hello done Server
(6)Certificate Client
(7)Client Key Exchange Client
(8)Certificate Verify Client
(9)Change cipher spec Client
(10)Finished Client
(11)Change cipher spec Server
(12)Finished Server

客戶端的身份驗(yàn)證是可選的, 由服務(wù)器決定是否驗(yàn)證客戶端的身份(銀行網(wǎng)銀類似是需要驗(yàn)證客戶端的身份)

  • 1、服務(wù)器發(fā)送Certficate Requset消息,請(qǐng)求客戶端的證書(shū)
  • 2、客戶端通過(guò)Certificate消息將攜帶自己的證書(shū)發(fā)送給服務(wù)端
  • 3、服務(wù)端驗(yàn)證該證書(shū)的合法性
  • 4、客戶端計(jì)算已交互的握手信息、主密鑰的hash值,利用自己的私鑰對(duì)其進(jìn)行加密,發(fā)送給服務(wù)端
  • 5、服務(wù)端計(jì)算已交互的握手信息,主密鑰的hash值,利用客戶端的公鑰解密后,進(jìn)行hash值對(duì)比,如果相同則客戶端身份驗(yàn)證成功
說(shuō)明:change cipher spec消息屬于SSL密碼變化協(xié)議,其他握手過(guò)程交互的消息均屬于SSL握手協(xié)議,統(tǒng)稱為SSL握手消息。計(jì)算Hash值,指的是利用Hash算法(MD5或SHA)將任意長(zhǎng)度的數(shù)據(jù)轉(zhuǎn)換為固定長(zhǎng)度的數(shù)據(jù)

OpenSSL開(kāi)源軟件

1、簡(jiǎn)介

Openssl是開(kāi)源軟件,各應(yīng)用程序可以使用openssl進(jìn)行安全通訊,避免竊聽(tīng)、同時(shí)確認(rèn)另一端連線者的身份,openssl被廣泛應(yīng)用在網(wǎng)頁(yè)服務(wù)器之上。其是C語(yǔ)言所寫(xiě),實(shí)現(xiàn)了基本的加密功能,也是SSL/TLS協(xié)議的應(yīng)用實(shí)現(xiàn)。此軟件是以Eric Young以及Tim Hudson兩人所寫(xiě)的SSLeay的分支,于1998年12月發(fā)布第一個(gè)版本

2、Openssl的版本
  • V0.91c (1998年12月發(fā)布)
  • V1.0.1 : 支持TLS v1.2(2012年3月發(fā)布)
  • V1.0.2 (2015年1月發(fā)布)
3、OpenSSL的組成部分:
  • 加密解密庫(kù):Libencrypt,主要開(kāi)發(fā)者使用
  • Libssl : 實(shí)現(xiàn)SSL安全通信機(jī)制的庫(kù)
  • OpenSSL工具:多用途命令行工具
openssl加密工具
對(duì)稱加密工具:openssl enc
  • 加密:openssl enc -e -des3 -a -salt -in fstab -out fstab.cipher

  • 解密 :openssl enc -d -des3 -a -salt -out fstab -in fstab.cipher

      -e : 加密
      -d : 解密 
      -a : 以base64編碼進(jìn)行輸出
      -salt : 加鹽
      -in :指定從那個(gè)文件讀入
      -out : 輸出至那個(gè)文件
    
單向加密工具:openssl dgst
  • openssl dgst -md5 fstab

      -md5 :指定算法
    
生成用戶密碼:openssl passwd
  • openssl passwd -1 -salt 12345678

      -1 : 指定加密算法
      -salt : 加鹽,并且為123456
    
生成隨機(jī)數(shù):openssl rand
  • openssl rand -base64 10 (base64編碼格式)
  • openssl rand -hex 10 (16進(jìn)制編碼格式)
  • openssl passwd -1 -salt $(openssl rand -hex 4)
生成私鑰:openssl genrsa
  • openssl genrsa 1024 > /tmp/mykey.private
  • openssl genrsa 1024 -out /tmp/mykey.private 1024
  • (umask 077;openssl genrsa -out /tmp/mykey.private 1024)
提取公鑰:openssl rsa
  • openssl rsa -in /PATH/FROM/private.key -pubout
  • openssl rsa -in /PATH/FROM/private.key -pubout -out pub.key
查看證書(shū):opensll x509
  • openssl x509 -in httpd.crt -noout -serial -subject :只查看序列號(hào)和subject
Openssl CA的工作目錄
  • /etc/pki/CA
Openssl配置文件
  • /etc/pki/tls/openssl.cnf
    • $dir/certs : 簽發(fā)的證書(shū)存放位置
    • $dir/crl : 吊銷的證書(shū)存放位置
    • $dir/index.txt : 證書(shū)的索引信息
    • $dir/serial : 索引序列號(hào)
    • $dir/private/cakey.pem : CA自己的私鑰
    • $dir/cacert.pem : CA公鑰位置
    • [req] : 此ID中定義了簽署證書(shū)的屬性

構(gòu)建CA及簽發(fā)證書(shū)的步驟

########自建CA########
1、生成私鑰
    (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
2、生成自簽證書(shū)
    openssl req -x509 -new -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
3、為CA提供所需的目錄及文件
    mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
4、建立證書(shū)索引序列號(hào)
    echo 01 > /etc/pki/CA/serial
    
########客戶端生成私鑰及生成簽發(fā)證書(shū)請(qǐng)求########
1、到客戶端相應(yīng)的目錄中,生成私鑰 
    mkdir /etc/httpd/ssl
    (umask 077; openssl genrsa -out httpd.key 2048)
2、生成簽署請(qǐng)求文件(實(shí)為導(dǎo)出公鑰信息)
    openssl req -new -key httpd.key -out httpd.csr -days 365

########服務(wù)器端簽署證書(shū)########
1、openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365

#######拷貝簽署的文件至客戶端指定目錄#######
1、cp /tmp/httpd/csr /etc/httpd/ssl

CA吊銷證書(shū)

1、客戶端獲取要吊銷證書(shū)的serial
2、CA端主機(jī)執(zhí)行吊銷操作
    openssl ca -revoke /etc/pki/CA/newcert/SERIAL_ID(證書(shū)的真正序列號(hào))
3、生成吊銷證書(shū)的吊銷編號(hào)(只是第一次吊銷證書(shū)時(shí)執(zhí)行)
    echo 01 > /etc/pki/CA/crlnumber
4、更新證書(shū)吊銷列表
    openssl ca -gencrl -out thisca.crl
    
#####查看crl文件
openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 互聯(lián)網(wǎng)的通信安全,建立在SSL/TLS協(xié)議之上。 本文簡(jiǎn)要介紹SSL/TLS協(xié)議的運(yùn)行機(jī)制。文章的重點(diǎn)是設(shè)計(jì)思想和...
    拉肚閱讀 2,987評(píng)論 0 6
  • 本文摘自 騰訊bugly 的文章《全站 HTTPS 來(lái)了》,內(nèi)容有修改。 大家在使用百度、谷歌或淘寶的時(shí)候,是否注...
    bnotes閱讀 3,868評(píng)論 1 9
  • 一、作用 不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文傳播,帶來(lái)了三大風(fēng)險(xiǎn)。 (1)竊聽(tīng)風(fēng)險(xiǎn)...
    XLsn0w閱讀 11,013評(píng)論 2 44
  • 本文轉(zhuǎn)載,出處如下:數(shù)字證書(shū)原理 文中首先解釋了加密解密的一些基礎(chǔ)知識(shí)和概念,然后通過(guò)一個(gè)加密通信過(guò)程的例子說(shuō)明了...
    隨安居士閱讀 1,806評(píng)論 1 8
  • 記得去年2月底,你罵我罵的好慘,我都不知道怎么得罪你了,我就像你的助理一樣,給你們跑去買(mǎi)煙買(mǎi)酒, 都沒(méi)能和你吃上一...
    君君之閱讀 146評(píng)論 0 0

友情鏈接更多精彩內(nèi)容