HTTPS認證二: openssl生成證書及簽名

CA根證書

  • 創建 CA 根證書(使用這個根證書籤發服務器和客戶端的證書)
mkdir private
# 生成私鑰 key 文件:
openssl genrsa -out private/ca.key 2048  
輸出
Generating RSA private key, 2048 bit long modulus  
.......+++
.........................+++
e is 65537 (0x10001)  
private 目錄下有 ca.key 文件生成。

# 生成證書請求 csr 文件
openssl req -new -key private/ca.key -out private/ca.csr  

這裏需要填寫一些信息

# 生成憑證 crt 文件
openssl x509 -req -days 365 -in private/ca.csr -signkey private/ca.key -out private/ca.crt  

 創建配置文件:

  • conf 目錄新建 openssl.conf 文件
[ ca ] 
default_ca      = foo                   # The default ca section 

[ foo ] 
dir            = ./         # top dir  
database       = ./index.txt          # index file.  
new_certs_dir  = ./newcerts           # new certs dir 

certificate    = ./private/ca.crt         # The CA cert  
serial         = ./serial             # serial no file  
private_key    = ./private/ca.key  # CA private key  
RANDFILE       = ./private/.rand      # random number file 

default_days   = 365                     # how long to certify for  
default_crl_days= 30                     # how long before next CRL  
default_md     = sha1                     # message digest method to use  
unique_subject = no                      # Set to 'no' to allow creation of  
                                         # several ctificates with same subject. 
policy         = policy_any              # default policy 

[ policy_any ] 
countryName = match  
stateOrProvinceName = match  
organizationName = match  
organizationalUnitName = match  
localityName            = optional  
commonName              = supplied  
emailAddress            = optional  

服務器證書的生成

# 創建一個 key,服務器不需要密碼
openssl genrsa -out server/server.key 2048  

# 爲我們的 key 創建一個證書籤名請求 csr 文件
openssl req -new -key server/server.key -out server/server.csr

# 會有一些問題,保持和之前一樣就好,注意裏面的hostname, 填寫服務器的Ip地址,確保能通過這個地址訪問服務器

# 使用我們私有的 CA key 爲剛纔的 key 簽名
openssl ca -in server/server.csr -cert private/ca.crt -keyfile private/ca.key -out server/server.crt -config "./conf/openssl.conf"  

# 會有一些提示信息,直接確認

客戶端證書的生成

mkdir users 
# 爲用戶創建一個 key,需要密碼
openssl genrsa -des3 -out ./users/client.key 2048  
# 根據提示輸入密碼

# 爲 key 創建一個證書籤名請求 csr 文件,會有一些信息,和之前填寫一致
openssl req -new -key ./users/client.key -out ./users/client.csr  

# 使用我們私有的 CA key 爲剛纔的 key 簽名
openssl ca -in ./users/client.csr -cert ./private/ca.crt -keyfile ./private/ca.key -out ./users/client.crt -config "./conf/openssl.conf"  

爲了可以通過瀏覽器驗證,轉化爲P12格式:

openssl pkcs12 -export -clcerts -in ./users/client.crt -inkey ./users/client.key -out ./users/client.p12  
# 輸入密碼後,users 目錄下有 client.p12 文件生成。

格式轉換:

爲了在程序中使用,我們將客戶端crt 和 key以及ca.crt轉化爲PEM格式的文件

openssl x509 -in ca.crt -out cacrt.pem -outform PEM
openssl x509 -in client.crt -out clientcrt.pem -outform PEM
openssl rsa -in client.key -out clientkey.pem

我們需要的證書文件有:

根證書

ca.crt

cacrt.pem

根證書籤發的服務端證書

server.crt

 

服務端私鑰

server.key

 

根證書籤發的客戶端證書

client.crt

clientcrt.pem

客戶端私鑰

client.key

clientkey.pem

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章