1. 程式人生 > >自簽名證書和私有CA簽名的證書的區別 建立自簽名證書 建立私有CA 證書型別 證書副檔名

自簽名證書和私有CA簽名的證書的區別 建立自簽名證書 建立私有CA 證書型別 證書副檔名

自簽名的證書無法被吊銷,CA簽名的證書可以被吊銷 能不能吊銷證書的區別在於,如果你的私鑰被黑客獲取,如果證書不能被吊銷,則黑客可以偽裝成你與使用者進行通訊 如果你的規劃需要建立多個證書,那麼使用私有CA的方法比較合適,因為只要給所有的客戶端都安裝了CA的證書,那麼以該證書籤名過的證書,客戶端都是信任的,也就是安裝一次就夠了 如果你直接用自簽名證書,你需要給所有的客戶端安裝該證書才會被信任,如果你需要第二個證書,則還的挨個給所有的客戶端安裝證書2才會被信任。 證書型別: x509的證書編碼格式有兩種 1.PEM(Privacy-enhanced Electronic Mail) 是明文格式的  以 -----BEGIN CERTIFICATE-----開頭,已-----END CERTIFICATE-----結尾,中間是經過base64編碼的內容,apache需要的證書就是這類編碼的證書 檢視這類證書的資訊的命令為 :openssl x509 -noout -text -in server.pem 其實PEM就是把DER的內容進行了一次base64編碼 2.DER 是二進位制格式的證書   檢視這類證書的資訊的命令為 :openssl x509 -noout -text -inform der -in server.der 副檔名: .crt 證書檔案 ,可以是DER(二進位制)編碼的,也可以是PEM( ASCII (Base64) )編碼的 ,在類unix系統中比較常見  .cer 也是證書  常見於Windows系統  編碼型別同樣可以是DER或者PEM的,windows 下有工具可以轉換crt到cer .csr 證書籤名請求   一般是生成請求以後傳送給CA,然後CA會給你簽名併發回證書 .key  一般公鑰或者金鑰都會用這種副檔名,可以是DER編碼的或者是PEM編碼的  檢視DER編碼的(公鑰或者金鑰)的檔案的命令為 openssl rsa -inform DER  -noout -text -in  xxx.key  檢視PEM編碼的(公鑰或者金鑰)的檔案的命令為 openssl rsa -inform PEM   -noout -text -in  xxx.key   .p12 證書  包含一個X509證書和一個被密碼保護的私鑰

生成證書籤名請求  用openssl  req 給證書籤名 用 openssl x509 自簽名證書的Issuer和Subject是一樣的
證書的三個作用   加密通訊和身份驗證(驗證對方確實是對方聲稱的物件)和資料完整性(無法被修改,修改了會被知)
一. 自簽名證書: 1.生成伺服器私鑰  openssl genrsa -des3 -out server.key 4096 2.生成證書籤名請求  openssl req -new -key server.key -out server.csr  這裡要填一大堆東西 保證Common name跟你的域名或者IP相同 3.對上一步生成的證書籤名請求進行簽名  openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt  4.生成無需密碼的伺服器私鑰 ,如果私鑰是有密碼的,則每次啟動web伺服器都會要求你輸入密碼  openssl rsa -in server.key -out server.key.insecure
mv server.key server.key.secure
mv server.key.insecure server.key  確保你的私鑰的安全性  因為該證書無法被吊銷  chmod 999  server.key.secure  server.key 還有一個簡單的方法一步建立私鑰和自簽名請求
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout apache.key -out apache.crt
這裡的apache.key為私鑰  apache.crt為證書
二.建立私有CA,然後用該CA給證書進行簽名 1.建立CA私鑰  openssl genrsa -des3 -out ca.key 4096 2.生成CA的自簽名證書   openssl req -new -x509 -days 365 -key ca.key -out ca.crt   其實CA證書就是一個自簽名證書 3.生成服務端私鑰  openssl genrsa -des3 -out server.key 4096 4.需要簽名的物件(服務端)生成證書籤名請求  openssl req -new -key server.key -out server.csr  這裡注意證書籤名請求當中的Common Name必須區別與CA的證書裡面的Common Name 5.用步驟2建立的CA證書給步驟4生成的簽名請求進行簽名 openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt 三.檢視資訊  openssl rsa -noout -text -in server.key 檢視私鑰資訊 openssl req -noout -text -in server.csr 檢視簽名請求資訊 openssl rsa -noout -text -in ca.key   檢視ca的私鑰資訊 openssl x509 -noout -text -in ca.crt  檢視證書資訊 openssl crl -text -in   xx.crl  檢視一個證書吊銷列表資訊 openssl x509 -purpose -in cacert.pem  檢視一個證書的額外資訊 openssl rsa -in key.pem -pubout -out pubkey.pem 從一個私鑰裡面提取出公鑰 openssl rsa -noout -text -pubin -in apache.pub  檢視一個公鑰的資訊 openssl verify  -CAfile  指定CA檔案路徑    apache.crt  驗證一個證書是否是某一個CA簽發  openssl s_client -connect 192.168.20.51:443  模擬一個ssl客戶端訪問ssl伺服器  如果服務端要求客戶端提供證書  則在加上 -cert 和-key引數 比如 openssl s_client -connect 192.168.20.51:443 -cert client.crt  -key client.key  openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys  從p12檔案裡面提取證書openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes  從p12檔案裡面提取私鑰 現代瀏覽器檢查一個證書是否仍然有效 兩種方法 OCSP (Online Certificate Status Protocol,線上證書狀態協議) 和crl (Certificate Revoke List ,證書吊銷列表) 這些資訊在CA的證書裡面應該得有,否則瀏覽器無法檢查由該CA簽過的證書是否還繼續有效  (這句話屬於猜測) 可以試一下匯出給京東或者淘寶簽名的CA證書 並用openssl x509 -noout -text -in ca.crt 檢視一下,就能看到這兩類資訊京東的證書是由GeoTrustSSL進行簽名的,匯出GeoTrustSSL CA的證書 然後檢視該CA的資訊其中有一段資訊是這樣
  1. X509v3 CRL Distribution Points:   
  2.     Full Name:  
  3.       URI:http://g1.symcb.com/crls/gtglobal.crl  
  4. Authority Information Access:   
  5.     OCSP - URI:http://g2.symcb.com  
這裡說明了它的證書吊銷列表地址和OSCP協議地址
有興趣的可以試試給淘寶簽名的CA的證書資訊

對已證書吊銷列表 各瀏覽器的行為可以參考一下兩個地址 easy-rsa這個包封裝了這些操作,可以很方便的建立CA和證書 這個工具是為了配合openvpn使用的,不過也可以用來建立WEB證書

easy-rsa的特點是 使用方便不需要記憶大量的命令 而且配置檔案裡面有各種資訊可以使你生成帶有擴充套件資訊的簽名 比如 CA:TRUE等資訊
1.安裝easy-rsa yum install easy-rsa 2.然後拷貝整個目錄到工作目錄 比如當前目錄 cp -r /usr/share/easy-rsa/2.0 . 3.進入工作目錄 cd 2.0 4.修改vars檔案  修改國家省市程式碼 Common Name等,修改完以後匯入一下. vars 5:  清除一下    ./clean-all 6.建立CA證書  ./build-ca   執行完這一步 在keys目錄下就生成了 ca.crt(CA證書),ca.key(CA私鑰) 7.建立服務端證書  ./build-key-server  域名或者ip(有域名填域名沒域名寫ip)  這樣就建立好服務端證書和私鑰了 8.安裝CA的證書到客戶端    然後安裝服務端的證書和私鑰到APACHE apache的ssl配置
把生成的服務端的證書和私鑰拷貝到一個目錄 保證私鑰的安全性
然後安裝apache的ssl模組
yum install mod_ssl
修改 vim /etc/httpd/conf.d/ssl.conf
修改 SSLCertificateFile 指令為證書檔案的路徑
修改 SSLCertificateKeyFile 修改為私鑰檔案的路徑 reference: