Openssl是Linux下的基礎安全工具數據庫
先簡要介紹一些基礎知識:apache
Openssl功能主要有:對稱加密(DES、3DES、AES等),非對稱加密(RSA),散列(MD五、SHA1等)以及證書的相關操做(建立、申請、頒發、吊銷等)安全
PKI體系成爲公鑰加密體系,組成部分包括:認證中心、註冊中心、證書庫、證書廢止列表。服務器
Openssl經常使用證書格式:X50九、PKCS七、PKCS12。工具
證書文件經常使用存儲格式:PEM(BASE64)、PFX或P12(二進制)加密
本文主要實踐點:ssl
一、根CA相關操做(私鑰生成、生成自認證證書)get
二、用戶證書相關操做(私鑰生成、生成證書籤發請求文件、根CA贊成請求籤發該證書)input
三、次級CA證書相關操做(從根CA獲得次級CA證書和次級CA私鑰以後,再給下屬用戶簽發證書)openssl
實驗環境:
RHEL 6.3(KVM虛擬機) rootca.testlibq.com
RHEL 6.3(KVM虛擬機) apache.testlibq.com(以APACHE服務器爲次級CA)
Windows XP(KVM虛擬機) xp.testlibq.com(以展現證書)
實驗步驟:
一、生成根CA證書
登陸到ROOTCA機器
cd /etc/pki/CA/private
openssl genrsa -des3 -out rootca.key 1024
#生成ROOTCA私鑰,rootca.key格式爲PEM
[設置rootca私鑰密碼,例如輸入rootca]
touch /etc/pki/CA/index.txt #建立證書數據庫文件
echo "01" > /etc/pki/CA/serial #建立證書序號文件
openssl req -new -x509 -key rootca.key -out /etc/pki/CA/rootca.crt
#生成ROOTCA證書(類型爲X509),rootca.crt格式爲PEM
[輸入rootca私鑰密碼:rootca]
[填入一堆證書信息]
因爲/etc/pki/tls/openssl.cnf中設置了CA的私鑰和證書路徑,因此這裏使用軟連接。
ln -s /etc/pki/CA/private/rootca.key /etc/pki/CA/private/cakey.pem
ln -s /etc/pki/CA/rootca.crt /etc/pki/CA/cacert.pem
這樣,CA便設置好了。
查看證書和私鑰能夠用如下命令:
openssl rsa -in /etc/pki/CA/private/rootca.key -text -noout
openssl x509 -in /etc/pki/CA/rootca.crt -text -noout
二、用戶證書的相關操做
PS:
用戶證書能夠在用戶端生成私鑰和請求文件,而後傳遞至CA,由CA簽發後,發給用戶。
也能夠由根CA生成用戶私鑰和請求文件,而後簽發後把私鑰和證書發給用戶。
這裏演示後者。
登陸到rootca機器(接實驗1)
cd /etc/pki/CA/private
openssl genrsa -des3 -out a.key 1024 #生成用戶私鑰
[set password of a.key]
openssl req -new -key a.key -out a.csr #生成用戶請求文件
[input password of a.key]
[輸入一堆證書信息]
openssl ca -in a.csr
[y,y]
生成證書位於/etc/pki/CA/newcerts/01.pem
PS:
該證書類型爲X509,若須要PKCS12類型證書,請使用
openssl pkcs12 -export -in /etc/pki/CA/newcerts/01.pem -inkey /etc/pki/CA/private/a.key -out a.pfx[輸入私鑰密碼][設置傳輸密碼]
三、生成證書鏈
此節內容網上文章較少,我研究了很久才搞出來。
首先上面兩個實驗是連着作的,第三個實驗請把上面的環境清除。
登陸到ROOTCA
cd /etc/pki/CA/private
touch ../index.txt
echo "01" > ../serial
openssl genrsa -des3 -out rootca.key 1024
ln -s rootca.key cakey.pem
openssl req -new -x509 -key rootca.key -out /etc/pki/CA/rootca.crt -extensions v3_ca
ln -s /etc/pki/CA/rootca.crt /etc/pki/CA/cacert.pem
這裏查看一下rootca證書:
openssl x509 -in /etc/pki/CA/rootca.crt -text -noout
肯定extensions中,有basicConstraint CA:TRUE,那麼表明正確。
PS:basicConstraint稱爲基礎約束,如有CA:TRUE,證實該證書具備CA效力。(因此上述實驗一、2中並不嚴謹,這點在須要證書鏈的場合尤其重要)
cd /etc/pki/CA/private
openssl genrsa -des3 -out apache.key 1024
openssl req -new -key /etc/pki/CA/private/apache.key -out apache.csr
openssl ca -in apache.csr -out apache.crt -extensions v3_ca
PS:這個extensions相當重要,關係到apache這個證書有沒有資格再頒發證書給用戶。
登陸到apache主機
ln -s /etc/pki/CA/private/apache.key /etc/pki/CA/private/cakey.pem
ln -s /etc/pki/CA/apache.crt /etc/pki/CA/cacert.pem
下面製做用戶證書
cd /etc/pki/CA
touch index.txt
echo "01" > serial
openssl genrsa -des3 -out private/user1.key 1024 [user1]
openssl req -new -key private/user1.key -out private/user1.csr[user1][一堆證書信息]
openssl ca -in private/user1.csr -extensions usr_cert[y,y]
PS:這裏-extensions usr_cert沒必要要。
製做證書鏈
將rootca的證書和apache的證書整合到一個文件
cd /etc/pki/CA/certs
cp /etc/pki/CA/apache.crt chain.pem
cat rootca.crt >> chain.pem
驗證證書鏈
openssl verify -CAfile /etc/pki/CA/certs/chain.crt /etc/pki/CA/newcerts/01.pem
(若顯示Verify OK,表示驗證證書鏈成功)
轉換用戶證書爲PKCS12
openssl pkcs12 -export -in /etc/pki/CA/newcerts/01.pem -inkey /etc/pki/CA/private/user1.key -out /etc/pki/CA/private/user1.pfx -chain -CAfile /etc/pki/CA/certs/chain.crt
最後將user1.pfx複製到Windows中,導入證書,便於展現。
結果如圖: