天天看點

總結之: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   解密

<a href="http://s3.51cto.com/wyfs02/M02/22/D3/wKioL1Mo8LjRHGiLAASNpydrhdg004.jpg" target="_blank"></a>

數字證書:

   證書格式通常是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

單向加密、也叫hash算法:(One-Way加密)

   用不生成資料指紋的、也叫資料摘要算法、輸出是定長的、MD5是128位定長輸出、SHA1定長輸出160位、他的特性是不會出現碰撞的、每位資料隻要有一位不一樣就會産生巨大的變化、我們稱這種為雪崩效應、常用的算法MD5、SHA1、SHA512、常用工具有sha2sum、md5sum、cksum、openssl dgst。

   # sha1sum fstab

   # openssl dgst -sha1 fstab

<a href="http://s3.51cto.com/wyfs02/M02/22/D3/wKioL1Mo8qGRYU8qAACi9bv1dNk842.jpg" target="_blank"></a>

資訊摘要碼:

   MAC(Message Authentication Code):通常應用于實作在網絡通信中保證所傳輸的資料完整性、他的基本方式就是基于MAC将要通信的資料使用單向加密的算法擷取定長輸出、而後将這定長輸出安全可靠的送達到接收方的一種機制、簡單來講我們客氣端發送資料給伺服器時、用戶端會計算這段資料的特征碼、并而将這段特征碼發送給伺服器端、但是這種特征碼不能簡單的這樣傳送過去、他要基于MAC、調用單向加密計算這段特征碼、而後将加密的結果發送給伺服器端、保證特征碼不會被人修改、這是單向加密的一種實作、一種延伸應用;

   他的常用算法有:CBC-MAC、HMAC     

   對于openssl來講、如果你是用戶端、他可以幫我們生成密鑰對、幫我們生成證書申請、如果是發證方、他可以幫發證方自簽證書、還可以簽署證書、還可以生成吊銷清單、當然大範圍内全球内使用openCA。

    那接下來我們就用openssl完成證書生成、簽署、頒發以及吊銷等功能:

<a href="http://s3.51cto.com/wyfs02/M00/22/D1/wKiom1Mo8ebR3A4yAAgALJs1nQ4330.jpg" target="_blank"></a>

實作步驟:

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

   生成CA私鑰、這裡要注意、公鑰是按某種格式從私鑰中提取出來的、公鑰和私鑰是成對的、生成私鑰也就有了公鑰:

   在目前shell中用()執行指令表示括号中的指令要在子shell中執行,2048表示密鑰的長度、-out後面表示生成密鑰檔案儲存的路徑,生也的檔案權限是666、而這個檔案不能被别人通路、所在666-077就得到權限600:

   檢視公鑰或提取公鑰、這個并不是必要步驟:

   # openssl rsa -in private/cakey.pem -pubout -text

<a href="http://s3.51cto.com/wyfs02/M01/22/D3/wKioL1Mo87KwcGDEAAFzDOb-lMY884.jpg" target="_blank"></a>

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

   在CA的目錄下建立兩個檔案:

   # touch index.txt serial

<a href="http://s3.51cto.com/wyfs02/M02/22/D3/wKioL1Mo9DaCGJ7sAAD4Zm6-oOE736.jpg" target="_blank"></a>

   OK、CA的證書有了、那接下來就是給客戶簽署證書了;我這裡換另一台主機來做客戶、向CA了起簽署申請、如果要給伺服器使用、那一定要跟你的伺服器名保持一緻、我們這裡是以web伺服器使用的、是以生成的私鑰也要放在伺服器的目錄下、我這裡以httpd為例:

   生成密鑰對、我們專門分建一個目錄來存放:

   # mkdir /etc/httpd/ssl

   # (umask 077; openssl genrsa -out httpd.key 1024)

<a href="http://s3.51cto.com/wyfs02/M01/22/D1/wKiom1Mo9IOD_HMtAAEzY0ZsikU118.jpg" target="_blank"></a>

   用戶端生成證書簽署請求:

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

<a href="http://s3.51cto.com/wyfs02/M00/22/D3/wKioL1Mo9ISyuHPbAAMZWjTR_3w493.jpg" target="_blank"></a>

   再把httpd.csr發給遠端主機的CA簽

   # scp httpd.csr 172.16.251.171:/tmp/

<a href="http://s3.51cto.com/wyfs02/M01/22/D3/wKioL1Mo9KvTnwzkAAGD6uCXOk0448.jpg" target="_blank"></a>

   再切換到遠端主機的/tmp看一下有沒有一個叫httpd.csr的檔案:

<a href="http://s3.51cto.com/wyfs02/M01/22/D1/wKiom1Mo9PCSlFofAADwVuludfE414.jpg" target="_blank"></a>

   于是我們的CA檢查資訊完後就可以簽署了:

   # openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3655

<a href="http://s3.51cto.com/wyfs02/M00/22/D1/wKiom1Mo9RaAGH6JAAODPaQCazo758.jpg" target="_blank"></a>

   再把簽署好的證書發送回去給用戶端的主機:

   # scp httpd.crt 172.16.251.127:/etc/httpd/ssl/

<a href="http://s3.51cto.com/wyfs02/M00/22/D3/wKioL1Mo9RSyx2W-AAGh15Klvy8149.jpg" target="_blank"></a>

   發送給用戶端主機了我們就可以去檢視一下了:

   # ls -l /etc/httpd/ssl

<a href="http://s3.51cto.com/wyfs02/M01/22/D3/wKioL1Mo9TniSBy2AACX06DQojs497.jpg" target="_blank"></a>

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

   如果說證書過期了怎麼吊銷呢:(要在CA主機上吊銷)

   # openssl ca -revoke httpd.crt

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

   第一步:

<a href="http://s3.51cto.com/wyfs02/M02/22/D3/wKioL1Mo9ZjyzoxiAAEGaQj0wt4675.jpg" target="_blank"></a>

   第三步:

<a href="http://s3.51cto.com/wyfs02/M00/22/D2/wKiom1Mo9i6hsNNoAABBcE1u7Mk997.jpg" target="_blank"></a>

   第四步:

<a href="http://s3.51cto.com/wyfs02/M00/22/D3/wKioL1Mo9jKCKPMbAAE3Ua_NZdE365.jpg" target="_blank"></a>

   第五步:

<a href="http://s3.51cto.com/wyfs02/M02/22/D2/wKiom1Mo9ofwcPr2AAF9s9PkUbU077.jpg" target="_blank"></a>

   第六步:

<a href="http://s3.51cto.com/wyfs02/M00/22/D2/wKiom1Mo9rXzmZ25AADH1AWf5GM606.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/22/D3/wKioL1Mo9qyBo5rmAAGDfdilA-Y280.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M01/22/D2/wKiom1Mo9viCo5ruAABAaFkMpVE129.jpg" target="_blank"></a>

結束

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

本文轉自 wei0164 51CTO部落格,原文連結:http://blog.51cto.com/tanxw/1379417,如需轉載請自行聯系原作者

繼續閱讀