自簽名的證書無法被吊銷,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
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的信息其中有一段信息是這樣
這里說明了它的證書吊銷列表地址和OSCP協議地址
有興趣的可以試試給淘寶簽名的CA的證書信息
- X509v3 CRL Distribution Points:
- Full Name:
- URI:http://g1.symcb.com/crls/gtglobal.crl
- Authority Information Access:
- OCSP - URI:http://g2.symcb.com
有興趣的可以試試給淘寶簽名的CA的證書信息
對已證書吊銷列表 各瀏覽器的行為可以參考一下兩個地址
http://news.netcraft.com/archives/2013/05/13/how-certificate-revocation-doesnt-work-in-practice.html
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 修改為私鑰文件的路徑
把生成的服務端的證書和私鑰拷貝到一個目錄 保證私鑰的安全性
然后安裝apache的ssl模塊
yum install mod_ssl
修改 vim /etc/httpd/conf.d/ssl.conf
修改 SSLCertificateFile 指令為證書文件的路徑
修改 SSLCertificateKeyFile 修改為私鑰文件的路徑
reference:
https://metabrot.rocho.org/jan/selfsign.html
http://stackoverflow.com/questions/21297139/how-do-you-sign-certificate-signing-request-with-your-certification-authority/21340898#21340898 創建證書更復雜的應用 使用配置文件 可以生成 basicConstraints信息 CA:TURE等信息
http://stackoverflow.com/questions/21297139/how-do-you-sign-certificate-signing-request-with-your-certification-authority/21340898#21340898 創建證書更復雜的應用 使用配置文件 可以生成 basicConstraints信息 CA:TURE等信息
---
參考: