首先,我們要知道,在互聯網上,數據的安全性尤爲重要,所以對於數據的加密與解密的重要性就不言而喻了。下面我就來說說加密解密算法與用openssl創建CA數字證書籤署的相關知識。
加密,解密算法我們可以分爲3種:
單向加密(是爲了測試數據完整性的一種算法,抽取數據的數據指紋,也就是特徵碼)
單向加密有2個特徵
1,定長輸出 以固定長度輸出的
2,具有雪崩效應 極小的數據改變也會引發特徵碼的巨大的改變,例如下圖
圖中,我創建一個文件t1,計算出他的特徵碼,
然後我給文件t1添加一個字符h,然後再計算出特徵碼,你會發現2次的特徵碼完全不一樣。
對稱加密:(用於加密任意大小數據塊大小的數據,加密解密雙方使用同一對祕鑰)
常用的對稱加密有:3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法等,
對稱加密的特徵:加密解密使用同一口令,把明文分隔成固定大小塊進行加密的
缺陷: 每與一個用戶通信,就要使用一種口令,使祕鑰過於太多
祕鑰在傳輸的過程中安全性
非對稱加密:(加密和解密雙方使用不同的祕鑰)
分爲公鑰與私鑰 其中,公鑰是從私鑰中提取出來的,它是私鑰的一部分(私鑰位數非常長,一般1024位,2048位)並且,公鑰是公開的,大家都能看到,私鑰是自己留存的 。
公鑰加密算法
RSA:既能加密也能簽名(隨後我會介紹)的一種算法
DSA: 數據加密算法,只能用於簽名用的,
下面我們來說說,現在互聯網上常用的加密數據的過程:例如host1 與host2通信
加密過程:
第一步:host1用單向加密算法計算出數據data的特徵碼(數據指紋)放在數據後面,
第二步:host1用自己的私鑰加密 數據特徵碼,並放數據的後面
第三步:host1生成一對祕鑰,採用對稱加密對加密過的特徵碼和數據進行加密
第四步:host1用host2的公鑰再對整個數據加密,放在數據的後面
第五步: 把經過多重加密的數據發送給host2
解密過程:
第一步: host2 接收到host1 發來的數據,就用自己的私鑰去解密,成功解密,就證明這個數據的確是發給自己的沒錯,
第二步:host2 用host1生成的密碼解密數據,得到加密的特徵碼與加密的數據
第三步; host2 還要用host1的公鑰解密,來驗證是否是host1發出的這個數據的,用來驗證數據的來源是否是與自己通信的用戶
第四步:host2 用host1單向加密的算法來解密加密的數據的特徵碼
第五步:比較得出的特徵碼是否一致,一致則說明數據時完整的,沒被修改過。
加密解密的過程我們說完了,那麼就來說說,雙方通信室基於什麼基礎呢?爲什麼host1就相信host2的公鑰就是host2的,有什麼判斷依據呢?有,那就是CA(相當於***頒發機構的,用來證明身份的合法性的)
CA 又稱CA機構,即證書授權中心(Certificate Authority ),或稱證書授權機構,作爲電子商務交易中受信任的第三方,承擔公鑰體系中公鑰的合法性檢驗的責任。
CA的功能:簽發數字證書、管理下級審覈註冊機構、接受下級審覈註冊機構的業務申請、維護和管理所有證書目錄服務、向密鑰管理中心申請密鑰、實體鑑別密鑰器的管理,等等。
下面來介紹CA的工作機制,
雙方要想達到互信通信怎麼辦呢?
那就雙方各需要一個數字證書,證明自己的身份
那麼這個數字證書怎麼來的呢?
數字證書有CA簽署的(CA用自己的私鑰加密數字證書,用CA的公鑰驗證是否是CA簽署的)
爲什麼是CA簽署呢?
因爲CA是如今互聯網公認的唯一的數字證書籤署機構
首先,要想得到證書我們要先申請,再經CA簽署認證後,你就擁有在互聯網上通信的合法性了。
CA很重要,那麼我們來說說怎麼用openssl創建CA的吧
openssl創建私有CA的一般過程:
1)CA需要用爲自身生成一對祕鑰
先看下openssl生成了那些文件
我們可以看到:/etc/pki/CA 這個CA的主目錄,下屬的目錄private:用來存放CA自身的私鑰的
生成私鑰鑰的命令,並保存至/etc/pki/CA/private
紅線的部分爲,保存私鑰的目錄及文件名,且文件名爲cakey.pem(這是配置文件要求的默認文件名)
2)CA要爲自己簽署一個證書(目的:讓客戶端拿此證書來驗證CA頒發給其他客戶端簽署的證書是否合法)
證書中保存的是公鑰信息,自簽署證書的過程會從私鑰中提取所需的公鑰
自簽署證書的命令如下圖
-new 表示新的請求
-x509 表示生成自簽署證書
-key 表示後跟的文件路徑爲私鑰的文件路徑(從私鑰提取公鑰)
-out 表示存放自簽署證書的位置
-days 表示該證書的有效期天數,(就像***上的有效期一樣)
看吧生成了自簽署證書(此證書要給每個通信的客戶端都發一份,來驗證CA簽署的其他證書的合法性)
CA服務器的環境初始化:
CA要想正常工作還需要2個文件一個是索引文件,另一個是序列號文件(用來統計用的)
3)每一個通信的客戶端需要做的事情:
1,要生成一對祕鑰
我們以http服務申請證書的過程爲例:
我們要在HTTP服務的配置文件所在的目錄創建一個目錄來保存證書和私鑰文件
創建目錄ssl,並且在ssl目錄下創建祕鑰,
然後再生成簽署請求,並保存在ssl目錄下(可以任意目錄存放,用完就可以丟棄了)
2,生成證書請求(要想得到證書不申請,CA怎麼給你簽署呢)
3 把生成的證書請求發送給CA,請求CA簽署
問題是怎麼發送呢
scp /etc/httpd/ssl/httpd.csr CA服務器(IP地址)
如果是在同一公司內部的話,你可以使用ssh基於FTP服務發送請求,在這裏我是在同一主機上做的實驗,所以不用發送啦,在下一個博客裏我會介紹ssh的相關知識
4)CA先驗證申請者的信息,再簽署證書,簽署完成後返回給客戶端。
CA簽署證書的命令如下:
自此創建CA服務的流程基本如上圖的過程啦。