互動式 生成 X.509證書
(1)Root CA
- 生成CA的私鑰
- 生成CA的公鑰
openssl rsa -in ca/ca-prikey.pem -pubout -out ca/ca-pubkey.pem
- 生成CA的根證書
# 建立證書請求
openssl req -new -out ca/ca-req.csr -key ca/ca-prikey.pem
# 證書内容可選填 (其它 一路回車, 使用預設值)
Organization Name (eg, company) : XXX
Common Name (eg, YOUR name) []: root
# 自簽署證書 (Create a self-signed certificate)
openssl x509 -req -in ca/ca-req.csr -out ca/ca-cert.pem -signkey ca/ca-prikey.pem -days 3650
# (可選)将證書導出成浏覽器支援的.p12格式, 密碼: 123456
openssl pkcs12 -export -clcerts -in ca/ca-cert.pem -inkey ca/ca-prikey.pem -out ca/ca.p12
(2)使用根證書生成 一個node(即伺服器)的證書
- 生成node的私鑰
- 生成node的公鑰
openssl rsa -in ca/node-prikey.pem -pubout -out ca/node-pubkey.pem
- 使用根證書生成node的證書
# 建立證書請求
openssl req -new -out ca/node-req.csr -key ca/node-prikey.pem
# 一路回車, 使用預設值, 直到 Common Name (注意: 一定要寫伺服器所在的ip位址)
Organization Name (eg, company) : CMCC
Common Name (eg, YOUR name) []: 127.0.0.1
# 後續一路回車
# 使用CA憑證及密鑰對伺服器證書進行簽名
openssl x509 -req -in ca/node-req.csr -out ca/node-cert.pem -CA ca/ca-cert.pem -CAkey ca/ca-prikey.pem -CAcreateserial -days 3650
# (可選)将證書導出成浏覽器支援的.p12格式, 密碼: 123456
openssl pkcs12 -export -clcerts -in ca/node-cert.pem -inkey ca/node-prikey.pem -out ca/node.p12
(3)使用根證書生成 一個用戶端的證書
- 生成client的私鑰
- 生成client的公鑰
openssl rsa -in ca/client-prikey.pem -pubout -out ca/client-pubkey.pem
openssl x509 -in ca/client-cert.pem -pubkey -noout > ca/client-pubkey.pem
- 使用根證書生成client的證書
# 建立證書請求
openssl req -new -out ca/client-req.csr -key ca/client-prikey.pem
# 一路回車, 使用預設值, 直到 Common Name (注意: 可以填平台使用者名)
Organization Name (eg, company) : General Motors
Common Name (eg, YOUR name) []: voter1
Email Address []: [預設]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []: testing
# 自簽署證書
openssl x509 -req -in ca/client-req.csr -out ca/client-cert.pem -CA ca/ca-cert.pem -CAkey ca/ca-prikey.pem -CAcreateserial -days 3650
# (可選)将證書導出成浏覽器支援的.p12格式, 密碼: 123456
openssl pkcs12 -export -clcerts -in ca/client-cert.pem -inkey ca/client-prikey.pem -out ca/client.p12
非互動式生成 X.509證書
(1)Root CA
# CA憑證及密鑰生成方法一----直接生成CA密鑰及其自簽名證書
# 如果想以後讀取私鑰檔案ca_rsa_private.pem時不需要輸入密碼,亦即不對私鑰進行加密存儲,那麼将-passout pass:123456替換成-nodes
openssl req -newkey rsa:2048 -passout pass:123456 -keyout ca_rsa_private.pem -x509 -days 365 -out ca.crt -subj "/C=CN/ST=GD/L=SZ/O=COM/OU=NSP/CN=CA/[email protected]"
# CA憑證及密鑰生成方法二----分步生成CA密鑰及其自簽名證書:
# openssl genrsa -aes256 -passout pass:123456 -out ca_rsa_private.pem 2048
# openssl req -new -x509 -days 365 -key ca_rsa_private.pem -passin pass:123456 -out ca.crt -subj "/C=CN/ST=GD/L=SZ/O=COM/OU=NSP/CN=CA/[email protected]"
# 如果生成證書時報錯: Error opening file "../crypto/rand/randfile.c", 沒關系, 版本大于1.1.1就不報了
(2)使用根證書生成 一個伺服器證書
# 伺服器證書及密鑰生成方法一----直接生成伺服器密鑰及待簽名證書
# 如果想以後讀取私鑰檔案server_rsa_private.pem時不需要輸入密碼,亦即不對私鑰進行加密存儲,那麼将-passout pass:server替換成-nodes
openssl req -newkey rsa:2048 -passout pass:server -keyout server_rsa_private.pem -out server.csr -subj "/C=CN/ST=GD/L=SZ/O=COM/OU=NSP/CN=SERVER/[email protected]"
# 伺服器證書及密鑰生成方法二----分步生成伺服器密鑰及待簽名證書
# openssl genrsa -aes256 -passout pass:server -out server_rsa_private.pem 2048
# openssl req -new -key server_rsa_private.pem -passin pass:server -out server.csr -subj "/C=CN/ST=GD/L=SZ/O=COM/OU=NSP/CN=SERVER/[email protected]"
# 使用CA憑證及密鑰對伺服器證書進行簽名:
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca_rsa_private.pem -passin pass:123456 -CAcreateserial -out server.crt
# 将加密的RSA密鑰轉成未加密的RSA密鑰,避免每次讀取都要求輸入解密密碼
# 密碼就是生成私鑰檔案時設定的passout、讀取私鑰檔案時要輸入的passin,比如這裡要輸入“server”
openssl rsa -in server_rsa_private.pem -out server_rsa_private.pem.unsecure
(3)使用根證書生成 一個用戶端的證書
# 用戶端證書及密鑰生成方法一----直接生成用戶端密鑰及待簽名證書
# 如果想以後讀取私鑰檔案client_rsa_private.pem時不需要輸入密碼,亦即不對私鑰進行加密存儲,那麼将-passout pass:client替換成-nodes
openssl req -newkey rsa:2048 -passout pass:client -keyout client_rsa_private.pem -out client.csr -subj "/C=CN/ST=GD/L=SZ/O=COM/OU=NSP/CN=CLIENT/[email protected]"
# 用戶端證書及密鑰生成方法二----分步生成用戶端密鑰及待簽名證書:
# openssl genrsa -aes256 -passout pass:client -out client_rsa_private.pem 2048
# openssl req -new -key client_rsa_private.pem -passin pass:client -out client.csr -subj "/C=CN/ST=GD/L=SZ/O=COM/OU=NSP/CN=CLIENT/[email protected]"
# 使用CA憑證及密鑰對用戶端證書進行簽名:
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca_rsa_private.pem -passin pass:123456 -CAcreateserial -out client.crt
# 将加密的RSA密鑰轉成未加密的RSA密鑰,避免每次讀取都要求輸入解密密碼
# 密碼就是生成私鑰檔案時設定的passout、讀取私鑰檔案時要輸入的passin,比如這裡要輸入“client”
openssl rsa -in client_rsa_private.pem -out client_rsa_private.pem.unsecure
往期精彩回顧: - 區塊鍊知識系列
- 密碼學系列
- 零知識證明系列
- 共識系列
- 公鍊調研系列
- 比特币系列
- 以太坊系列
- EOS系列
- Filecoin系列
- 聯盟鍊系列
- Fabric系列
- 智能合約系列
- Token系列