自簽名證書和CA證書的區別和制作、使用


一、概念介紹

1)傳輸協議

HTTP(超文本傳輸)協議訪問互聯網上的數據是沒有經過加密的。也就是說,任何人都可以通過適當的工具攔截或者監聽到在網絡上傳輸的數據流。但是有時候,我們需要在網絡上傳輸一些安全性或者私秘性的數據,譬如:包含信用卡及商品信息的電子訂單。這個時候,如果仍然使用HTTP協議,勢必會面臨非常大的風險!相信沒有人能接受自己的信用卡號在互聯網上裸奔。
HTTPS(超文本傳輸安全)協議無疑可以有效的解決這一問題。所謂HTTPS,其實就是HTTP和SSL/TLS的組合,用以提供加密通訊及對網絡服務器的身份鑒定。HTTPS的主要思想是在不安全的網絡上創建一安全信道,防止黑客的竊聽和攻擊。
SSL(安全套接層)可以用來對Web服務器和客戶端之間的數據流進行加密。
SSL利用非對稱密碼技術進行數據加密。加密過程中使用到兩個秘鑰:一個公鑰和一個與之對應的私鑰。使用公鑰加密的數據,只能用與之對應的私鑰解密;而使用私鑰加密的數據,也只能用與之對應的公鑰解密。因此,如果在網絡上傳輸的消息或數據流是被服務器的私鑰加密的,則只能使用與其對應的公鑰解密,從而可以保證客戶端與與服務器之間的數據安全。

2)數字證書

所謂數字證書,是一種用於電腦的身份識別機制。由數字證書頒發機構(CA)對使用私鑰創建的簽名請求文件做的簽名(蓋章),表示CA結構對證書持有者的認可。數字證書擁有以下幾個優點:
使用數字證書能夠提高用戶的可信度
數字證書中的公鑰,能夠與服務端的私鑰配對使用,實現數據傳輸過程中的加密和解密
在證認使用者身份期間,使用者的敏感個人數據並不會被傳輸至證書持有者的網絡系統上
X.509證書包含三個文件:key,csr,crt。

key是服務器上的私鑰文件,用於對發送給客戶端數據的加密,以及對從客戶端接收到數據的解密
csr是證書簽名請求文件,用於提交給證書頒發機構(CA)對證書簽名
crt是由證書頒發機構(CA)簽名后的證書,或者是開發者自簽名的證書,包含證書持有人的信息,持有人的公鑰,以及簽署者的簽名等信息
備注:在密碼學中,X.509是一個標准,規范了公開秘鑰認證、證書吊銷列表、授權憑證、憑證路徑驗證算法等。

3)自簽證書的區別

自簽名私有證書VS私又CA自簽名證書

自簽名證書分為自簽名私有證書和自簽名CA證書兩種,區別是私有證書無法被吊銷,自簽的CA證書可以被吊銷。能不能吊銷證書的區別我理解是CA證書有一套證書吊銷機制,可以決定什么情況吊銷證書,而私有證書沒有這種安全機制(數據完整性,過期時間之類的吧),對於被劫持的風險更高(參考資料)(使用自簽的系統有幾個是重要的,況且即便是自簽的證書也會被瀏覽器提示未認證的簽名機構,不過有的瀏覽器可能對於私有證書這種認證會直接拒絕連提示的機會都不給)
再一個區別就是需要創建多個客戶端證書的時候,推薦使用CA證書,因為只要給所有的客戶端(有待推敲)都安裝了 CA 根證書,那么以該 CA 根證書簽名過的客戶端證書都是信任的,不需要重復的安裝客戶端證書。

申請權威機構的CA證書VS自簽名CA證書

1、權威CA機構申請的證書要花銀子,自簽證書不要銀子
2、自簽證書會出現google瀏覽器不認的情況,比較麻煩。漏洞也多,對安全不利。
3、使用機構簽發的證書時候需要聯網簽發,內網機器不用想

所以公網服務踏實的買證書,內網機器踏實的自簽證書。

4)證書類型

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證書和一個被密碼保護的私鑰

二、制作自簽證書

1)自簽私有證書

1.生成證書私鑰(Key)
openssl genrsa -des3 -out server.key 2048
生成rsa私鑰,des3算法,2048位強度,server.key是秘鑰文件名。生成私鑰的時候會要求提供一個至少4位數的序列號就當是密碼吧。
2.生成CSR(證書簽名請求)
openssl req -new -key server.key -out server.csr
此時可以將證書發送給證書頒發機構(CA),CA驗證過請求者的身份之后,會出具簽名證書。還有就是自建一個私有CA做認證。再者就是用OpenSSL實現自簽名,私有認證。
生成 CSR 的過程中,會提示輸入一些信息,包括:序列號、公鑰、用戶名稱、簽發者、CA簽名和其他一些附屬信息等。
證書驗證過程就是依賴於這信息和公鑰對應的私鑰進行。
其中一個提示是 Common Name (e.g. YOUR name),這個非常重要,這一項應填入 FQDN(Fully Qualified Domain Name)完全合格域名/全稱域名,
如果您使用 SSL 加密保護網絡服務器和客戶端之間的數據流,舉例被保護的網站是 https://test.example.cn,那么此處 Common Name 應輸入 test.example.cn
3.刪除私鑰中的密碼
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
4.生成自簽名證書
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
5、安裝私鑰和證書
將私鑰和證書文件復制到Apache的配置目錄下即可。
以上1-4步也可以使用一條命令執行完成:
openssl req -new -x509 -newkey rsa:2048 -keyout /root/ca/server.key -out /root/ca/server.crt

2)私有CA認證

私有CA就是自己創建一個CA根證書代替權威CA機構,然后用私有的根證書簽發客戶端證書
創建CA根證書
centos默認安裝了openssl,看一下目錄
/etc/pki/CA /etc/pki/tls

/etc/pki/CA/
    newcerts    存放CA簽署(頒發)過的數字證書(證書備份目錄)
    private     用於存放CA的私鑰
    crl 吊銷的證書

/etc/pki/tls/
    cert.pem    軟鏈接到certs/ca-bundle.crt
    certs/      該服務器上的證書存放目錄,可以放自己的證書和內置證書
    ca-bundle.crt    內置信任的證書
    private    證書密鑰存放目錄
    openssl.cnf    openssl的CA主配置文件

openssl的配置文件為openssl.cnf,一般存儲在/etc/pki/tls/目錄下。一定要注意配置文件中 [ policy_match ]標簽下設定的匹配規則。有可能因為證書使用的工具不一樣,導致即使設置了csr中看起來有相同的countryName,stateOrProvinceName等,但在最終生成證書時依然報錯。一般情況下,配置文件不需要改動。
生成根證書
1.生成根證書密鑰

cd /etc/pki/CA/
openssl genrsa -out ./private/ca.key 2048

2.生成根證書請求
openssl req -new -in ./private/ca.key -out ca.csr

3.生成根證書
openssl x509 -req -in ca.csr -signkey ./private/ca.key -extensions v3_ca -out ca.crt

簽發證書
我們可以用CA根證書簽發證書,也可以創建中間CA,使用中間CA簽發證書。創建中間CA的好處是即使中間CA的私鑰泄露,造成的影響也是可控的,我們只需要使用root CA撤銷對應中間CA的證書即可。此外root CA的私鑰可以脫機妥善保存,只需要在撤銷和更新中間CA證書時才會使用。基於根證書創建中間CA與創建根證書過程類似。我們新建一個目錄用於保存中間證書信息
創建中間證書(可以不做)

#准備環境

mkdir /etc/pki/CA/intermediate
cd /etc/pki/CA/intermediate
mkdir certs crl newcerts private
chmod 700 private
touch index.txt
echo 1000 > serial

#生成密鑰
cd /etc/pki/CA
openssl genrsa -aes256 -out intermediate/private/ca.key 2048
#新建請求
openssl req -config intermediate_CA.cnf -sha256 -new -key intermediate/private/ca.key -out intermediate/certs/ca.csr
#簽發中間CA證書
openssl ca -config root_CA.cnf -extensions v3_ca -notext -md sha256 -in intermediate/certs/ca.csr -out intermediate/certs/ca.cert

利用根證書或者中間證書簽發客戶端證書的步驟如下:
mkdir -p /root/ca
1.新建證書密鑰
openssl genrsa -out /root/ca/server.key 2048
2.新建證書請求
注意要和剛才ca證書申請的,信息一致
openssl req -new -in /root/ca/server.key -out /root/ca/server.csr
3.CA簽發證書
openssl x509 -req -in /root/ca/server.csr -CA /etc/pki/CA/ca.crt -CAkey /etc/pki/CA/private/ca.key -CAcreateserial -out /root/ca/server.crt
4.證書有效性驗證
openssl verify -CAfile /etc/pki/CA/ca.crt /root/ca/server.crt
5.不同客戶端證書格式轉換

#crt,pem格式證書可用於linux/nginx/node.js格式客戶端
#p12(pkcs12)格式證書用於tomcat/java/android客戶端
#打包為p12證書
openssl pkcs12 -export -in /root/ca/server.crt -inkey /root/ca/server.key -out /root/ca/server.p12

6.吊銷證書

#獲取要吊銷的證書的serial
openssl x509 -in /root/ca/server.crt -noout -serial -subject

#對比serial與subject 信息是否與index.txt中的信息一致
#如果一致,則可以吊銷證書
openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

#如果是第一次吊銷證書,需要指定吊銷的證書編號
echo 01 >/etc/pki/CA/crlnumber

#更新吊銷證書列表
openssl ca -gencrl -out /etc/pki/CA/crl.pem

#完成后,可查看吊銷的證書列表
openssl crl -in /etc/pki/CA/crl.pem -noout -text

三、使用

play

1、在項目里新建一個文件夾
2、將剛才簽好客戶端證書server.crt、server.key放到這里
3、打開配置文件conf/application.conf
4、添加以下三行

https.port=8000
certificate.key.file=      不要使用絕對路徑
certificate.file= 

5、重啟項目 play restart

harbor

v3版的證書

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=testca.com
DNS.2=web
EOF

subj = /C=ch/ST=State or Province Name/L=beijing/O=jss/OU=jss/CN=yqpt2.com/emailAddress=testemail@qq.com 樣例
1. mdkir -p /root/ca;cd /root/ca   放到一個目錄里也可以,最后再把ca放到private里,方便管理
根CA
2. openssl genrsa -out ca.key 4096
3. openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=mydomain.com" -key ca.key -out ca.crt
簽發客戶端證書
5. openssl genrsa -out mydomain.com.key 4096
6. openssl req -sha512 -new -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=mydomain.com" -key mydomain.com.key -out mydomain.com.csr
7. openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in mydomain.com.csr -out mydomain.com.crt
驗證證書
8. openssl verify -CAfile ca.crt mydomain.com.crt

參考文檔1
參考文檔2
參考文檔3


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM