總結之:CentOS6.5下openssl加密解密及CA自籤頒發證書詳解

前言
   openSSL是一款功能強大的加密工具、我們當中許多人已經在使用openSSL、用於創建RSA私鑰或證書籤名請求、不過、你可知道可以使用openSSL來測試計算機速度?或者還可以用它來對文件或消息進行加密。

正文

   openssl是一個開源程序的套件、這個套件有三個部分組成、一是libcryto、這是一個具有通用功能的加密庫、裏面實現了衆多的加密庫、二是libssl、這個是實現ssl機制的、他是用於實現TLS/SSL的功能、三是openssl、是個多功能命令行工具、他可以實現加密解密、甚至還可以當CA來用、可以讓你創建證書、吊銷證書、這裏我們用openssl enc對一個文件進行加密看看:
   # openssl enc -des3 -a -salt -in /etc/fstab -out /tmp/fstab.cipher    加密
   # cat /tmp/fstab.cipher
   # openssl enc -d -des3 -a -salt -in /tmp/fstab.cipher -out /path/to/fstab.cipher   解密
wKioL1Mo8LjRHGiLAASNpydrhdg004.jpg


數字證書:
   證書格式通常是x509的數字證書的格式、還有pkcs等其他的。
    對於x509這種證書內容當中都包含哪些呢:
    1、公鑰和也就是有效期限。
    2、持有者的個人合法身份信息、這個信息有可能是一個公司、也可能是個人、也可以是主機名。
    3、證書的使用方式、比如用來進行主機之間的認證等。
    4、CA(證書頒發機構)的信息
    5、CA的數字簽名、CA的證是自簽證書    

公鑰加密、也叫非對稱加密
   公鑰加密最大的特性就是密鑰成對的、公鑰稱爲public key(pkey)、私鑰稱爲secret key(skey)、一般而言、公鑰用來加密、私鑰用來解密、如果要實現電子簽名那就是私鑰來用加密、公鑰用來解密、而公鑰是可以給任何人的、私鑰就得自己保存;公鑰加密一般不會加來對數據加密、因爲他的加密速度很慢、比對稱加密慢3個數量級(一個數量級是10倍、3個就是1000倍)、所以公鑰加密通常用於密鑰交換(IKE)和身份認證的。
   他的常用算法有:RSA和EIGamal、目前RSA是比較廣泛的加密算法、而DSA(Digital Signature Algorithm)只能加來做簽名、而無法加於加密的算法
   他的工具通常用:gpg、openssl rsautl
   wKioL1Mo_M3zqIQTAAMed6kdJFk241.jpg


單向加密、也叫hash算法:(One-Way加密)
   用不生成數據指紋的、也叫數據摘要算法、輸出是定長的、MD5是128位定長輸出、SHA1定長輸出160位、他的特性是不會出現碰撞的、每位數據只要有一位不一樣就會產生巨大的變化、我們稱這種爲雪崩效應、常用的算法MD5、SHA1、SHA512、常用工具有sha2sum、md5sum、cksum、openssl dgst。
   # sha1sum fstab
   # openssl dgst -sha1 fstab
wKioL1Mo8qGRYU8qAACi9bv1dNk842.jpg


信息摘要碼:
   MAC(Message Authentication Code):通常應用於實現在網絡通信中保證所傳輸的數據完整性、他的基本方式就是基於MAC將要通信的數據使用單向加密的算法獲取定長輸出、而後將這定長輸出安全可靠的送達到接收方的一種機制、簡單來講我們客氣端發送數據給服務器時、客戶端會計算這段數據的特徵碼、並而將這段特徵碼發送給服務器端、但是這種特徵碼不能簡單的這樣傳送過去、他要基於MAC、調用單向加密計算這段特徵碼、而後將加密的結果發送給服務器端、保證特徵碼不會被人修改、這是單向加密的一種實現、一種延伸應用;
   他的常用算法有:CBC-MAC、HMAC    
   對於openssl來講、如果你是客戶端、他可以幫我們生成密鑰對、幫我們生成證書申請、如果是發證方、他可以幫發證方自簽證書、還可以簽署證書、還可以生成吊銷列表、當然大範圍內全球內使用openCA。
    那接下來我們就用openssl完成證書生成、簽署、頒發以及吊銷等功能:

wKiom1Mo8ebR3A4yAAgALJs1nQ4330.jpg


實現步驟
   首先自己得有一個證書、那就先自籤一個證書、用openssl實現私有CA、CA的工作目錄都是在/etc/pki/CA下、而CA的配置文件在/etc/pki/tls/openssl.cnf這個文件中。

   生成CA私鑰、這裏要注意、公鑰是按某種格式從私鑰中提取出來的、公鑰和私鑰是成對的、生成私鑰也就有了公鑰:
   # (umask 077; openssl genrsa -out private/cakey.pem 2048)    wKiom1Mo8wvBeJ8aAAX_UqANBg4206.jpg


   在當前shell中用()執行命令表示括號中的命令要在子shell中執行,2048表示密鑰的長度、-out後面表示生成密鑰文件保存的路徑,生也的文件權限是666、而這個文件不能被別人訪問、所在666-077就得到權限600:


   查看公鑰或提取公鑰、這個並不是必要步驟:
   # openssl rsa -in private/cakey.pem -pubout -text

wKioL1Mo87KwcGDEAAFzDOb-lMY884.jpg


   生成自簽證書、用openssl中req這個命令、叫證書請求:

   # openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650    wKiom1Mo9AHwimaXAASKJgtp0-k242.jpg

   在CA的目錄下創建兩個文件:
   # touch index.txt serial
wKioL1Mo9DaCGJ7sAAD4Zm6-oOE736.jpg


   OK、CA的證書有了、那接下來就是給客戶簽署證書了;我這裏換另一臺主機來做客戶、向CA了起簽署申請、如果要給服務器使用、那一定要跟你的服務器名保持一致、我們這裏是以web服務器使用的、所以生成的私鑰也要放在服務器的目錄下、我這裏以httpd爲例:
   生成密鑰對、我們專門分建一個目錄來存放:
   # mkdir /etc/httpd/ssl
   # (umask 077; openssl genrsa -out httpd.key 1024)

wKiom1Mo9IOD_HMtAAEzY0ZsikU118.jpg


   客戶端生成證書籤署請求:
   # openssl req -new -key httpd.key -out httpd.csr
wKioL1Mo9ISyuHPbAAMZWjTR_3w493.jpg

   再把httpd.csr發給遠程主機的CA籤
   # scp httpd.csr 172.16.251.171:/tmp/
wKioL1Mo9KvTnwzkAAGD6uCXOk0448.jpg


   再切換到遠程主機的/tmp看一下有沒有一個叫httpd.csr的文件:
wKiom1Mo9PCSlFofAADwVuludfE414.jpg


   於是我們的CA檢查信息完後就可以簽署了:
   # openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3655
wKiom1Mo9RaAGH6JAAODPaQCazo758.jpg


   再把簽署好的證書發送回去給客戶端的主機:
   # scp httpd.crt 172.16.251.127:/etc/httpd/ssl/

wKioL1Mo9RSyx2W-AAGh15Klvy8149.jpg


   發送給客戶端主機了我們就可以去查看一下了:
   # ls -l /etc/httpd/ssl
wKioL1Mo9TniSBy2AACX06DQojs497.jpg

   於是我們的客戶端主機就可以配置使用CA簽署的證書了。


   如果說證書過期了怎麼吊銷呢:(要在CA主機上吊銷)
   # openssl ca -revoke httpd.crt


   這個證書製作好後我們就可以在windows下安裝我們製作好的證書了:

   第一步:

wKioL1Mo9ZjyzoxiAAEGaQj0wt4675.jpg


    第二步:    wKiom1Mo9fyiBtzYAAMxapROa1M015.jpg


   第三步:

wKiom1Mo9i6hsNNoAABBcE1u7Mk997.jpg


   第四步:

wKioL1Mo9jKCKPMbAAE3Ua_NZdE365.jpg


   第五步:

wKiom1Mo9ofwcPr2AAF9s9PkUbU077.jpg


   第六步:

wKiom1Mo9rXzmZ25AADH1AWf5GM606.jpg

wKioL1Mo9qyBo5rmAAGDfdilA-Y280.jpg

wKiom1Mo9viCo5ruAABAaFkMpVE129.jpg


結束
   OK、以上就是我們製作證書和在windows下安裝證書的過程、但在URL路徑下一定是要輸入https://www.tanxw.com就會看到證書的效果了、這裏我這個www.tanxw.com的主機名是做實驗用了、這裏我就不做解析測試了、有興趣的朋友可以關注後期的文章、在此、如果大神發現有什麼不對的歡迎指出、謝謝了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章