前言
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,如需轉載請自行聯系原作者