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

正文
   openssl是一個開源程序的套件、這個套件有三個部分組成、一是libcryto、這是一個具有通用功能的加密庫、裏面實現了衆多的加密庫、二是libssl、這個是實現ssl機制的、他是用於實現TLS/SSL的功能、三是openssl、是個多功能命令行工具、他可以實現加密解密、甚至還可以當CA來用、可以讓你創建證書、吊銷證書、這裏我們用opensslenc對一個文件進行加密看看:
   # 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   解密


數字證書:

   證書格式通常是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(DigitalSignature Algorithm)只能加來做簽名、而無法加於加密的算法
   他的工具通常用:gpg、opensslrsautl
   


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



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

 

實現步驟
   首先自己得有一個證書、那就先自籤一個證書、用
openssl實現私有CA、CA的工作目錄都是在/etc/pki/CA下、而CA的配置文件在/etc/pki/tls/openssl.cnf這個文件中。
   生成CA私鑰、這裏要注意、公鑰是按某種格式從私鑰中提取出來的、公鑰和私鑰是成對的、生成私鑰也就有了公鑰:
   # (umask 077; openssl genrsa -out private/cakey.pem 2048)   


   在當前shell中用()執行命令表示括號中的命令要在子shell中執行,2048表示密鑰的長度、-out後面表示生成密鑰文件保存的路徑,生也的文件權限是666、而這個文件不能被別人訪問、所在666-077就得到權限600:
   查看公鑰或提取公鑰、這個並不是必要步驟:
   # openssl rsa -in private/cakey.pem -pubout -text


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

   # opensslreq -new -x509 -key private/cakey.pem -out cacert.pem -days 3650    


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

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


   客戶端生成證書籤署請求:

   # openssl req -new -key httpd.key -out httpd.csr

   再把httpd.csr發給遠程主機的CA簽署
   # scp httpd.csr 172.16.251.171:/tmp/

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

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

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


   發送給客戶端主機了我們就可以去查看一下了:

   # ls -l /etc/httpd/ssl

   於是我們的客戶端主機就可以配置使用CA簽署的證書了。
   如果說證書過期了怎麼吊銷呢:(要在CA主機上吊銷)
   # openssl ca -revoke httpd.crt


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

   第一步:


   第二步:


   第三步:


   第四步:


   第五步:


   第六步:






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