前言
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 解密
數字證書:
證書格式通常是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
信息摘要碼:
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這個命令、叫證書請求:
# openssl req -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下安裝我們制作好的證書了:
第一步:
第二步:
第三步:
第四步:
第五步:
第六步:
結束
OK、以上就是我們制作證書和在windows下安裝證書的過程、但在URL路徑下一定是要輸入https://www.tanxw.com就會看到證 書的效果了、這里我這個www.tanxw.com的主機名是做實驗用了、這里我就不做解析測試了、有興趣的朋友可以關注后期的文章、在此、如果大神發現 有什么不對的歡迎指出、謝謝了!