前言
要自建CA需先了解openssl工具和ssl協議還有各加密類型
ssl(Secure Socket Layer)安全套接字層當前版本為3.0,瀏覽器與Web服務器之間的身份認證和加密數據傳輸,它工作在傳輸層和各應用層之間,用戶可以選擇是否使用ssl進行傳輸,選擇ssl協議將調用ssl函數庫,端口也會發生變化。
加密類型
對稱加密:任意加密數據塊和流的內容,加密和解密用同一個密碼, 通常明文通過算法和密鑰生成密文,再由接受者用相同的密鑰和算法解密獲取明文。
算法:(DES、3DES、AES現在使用比較廣、Blowfish、Twofish、IDEA、RC6、CAST5)
特性:加密、解密使用同一口令。將明文分割成固定大小塊,逐個進行加密
缺陷:密鑰過多、密鑰傳輸不安全、密鑰交換、身份驗證。
公鑰加密:公鑰和私鑰是成對出現的,公鑰包含在私鑰中,公鑰稱為public key、私鑰為secret key,由發起者對接受者索要公鑰,用公鑰加密數據后發送給接受者,接受者用算法和私鑰解密
缺陷:加密、解密時間過長一般不用于簡單通信
單項加密:單項機密也叫數據完整性校驗,抽取數據特征碼和之前特征碼作比較以確保數據沒有被竄改
認證協議:用來確定通信方的真實性。
ssl會話模型
發起者用單項加密獲取數據特征碼,用自己的私鑰計算特征碼附加在數據后面,在用對稱加密對整個包(數據和特征碼)進行加密,并用對方公鑰加密對稱加密密碼,附加在整個包中一并發給對方。接受者用自己的私鑰解密獲取對稱加密密碼,得到密碼后解密整個包獲得數據和特征碼,在用相同的算法計算特征碼,用對方的公鑰解密數據驗證對方身份,用對方計算結果(特征碼)和解析結果(特征碼)進行對比,來驗證數據的完整性。
openssl工具
對稱加密工具openssl enc
openssl命令選項:
-e:指定為加密,可以不寫默認為加密。
-des3:指定算法算法
-salt:默認設置,生成一段字符串放在密碼最前面進行加密,提高解密難度。
-a:基于base64處理數據。加密結果進行base64編碼處理
-in:讀取那個文件進行加密
-out:輸出到那里
-d:指定為解密
案例如下:
加密文件:openssl enc -e -des3 -a -salt -in test.sh -out ./test.txt
解密文件:openssl enc -d -des3 -a -salt -in test.txt -out ./test.sh
單項加密:openssl dgst
-md5:用md5方式加密
-sha1:sha1方式加密
-out:加密后密碼保存到那里
案例如下:
openssl dgst -md5 test.sh 或openssl dgst -md5 -out ./123a test.sh
openssl dgst -sha1 test.sh
用戶密碼:openssl passwd
-1:md5加密、
-salt:自己指定附加信息。
生成隨機數:openssl rand -base64 4或openssl rand -hex 4,生成8位隨機數
案例如下:
openssl passwd -1 -salt `openssl rand -base64 4` 123456
生成私鑰和公鑰:openssl genrsa
案例如下:
(umask 077;openssl genrsa -out ./mykey 2048)生成只有當前用戶可讀的2048字節mkkey私鑰文件
openssl rsa -in ./mykey -pubout,-pubout根據私鑰文件提取公鑰
建立私有CA:
服務器端:
生成密鑰
自簽證書
初始化工作環境
節點:
生成密鑰對兒
生成證書簽署請求
把請求發送給CA
CA服務器:
驗正請求者信息:自建CA無需該步驟
簽署證書
把簽好的證書發送給請求者
服務器端自建CA
生成密鑰:
(umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
自簽證書:
req: 生成證書簽署請求
-news: 新請求
-key /path/to/keyfile: 指定私鑰文件
-out /path/to/somefile:輸出文件到那里
-x509: 生成自簽署證書
-days n: 有效天數
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
詳細記錄證書創建時所填信息如不一致簽署將失敗。建議修改openssl.conf文件發給每個申請節點
初始化工作環境:
touch /etc/pki/CA/{index.txt,serial}:創建相關文件
echo 01 > /etc/pki/CA/serial。只需第一次創建序列號
節點申請證書:
生成密鑰:
(umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
生成證書簽署請求:
openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr
把簽署請求文件發送給CA服務
CA服務器簽署證書:
簽署證書:
openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days N
發送給請求者:
CA證書驗證會話模型
在基于tcp/ip協議建立后,服務端會把ca證書發送給客戶端,客戶端得到證書后通過ca公鑰進行解密ca簽名,能解密證明該證書是可信任的、把解密出來的數據和重新計算出來的特征碼對比對確保完整性、之后驗證主機的名稱和申請者名稱是否相同,驗證通過后客戶端會取得服務器端公鑰信息,客戶端用公鑰生成個一次性的對稱加密密碼發給服務器端。服務器端獲取密碼后加密網頁數據發給客戶端。
以上為建立CA大致流程,如有遺漏請告知。
原創文章,作者:xiangjin1,如若轉載,請注明出處:http://www.www58058.com/3991