關於生成private key 、csr、crt等內容,網路上很多都是很多命令,讓人眼花。今天介紹一行命令搞定。哪怕多個域名的csr (req)一行也搞定。
- 私有金鑰 – Pirvate Key
- 簽署要求 – Certificate Signing Request(CSR)
- 憑證 – CRT
先簡單說一個文檔格式。OpenSSL 命令行操作時 默認格式為PEM。
- DER 是一種二進制格式
- PEM 將二進制編碼成字符串。使用base64編碼。格式為:
-----BEGIN <whatever>-----
data
-----END <whatever>----
一行命令生成 private key 和 csr
openssl req -nodes -newkey rsa:4096 \
-keyout private.pem \
-out csr.pem \
-subj "/C=TW/ST=Zuid Holland/L=Rotterdam/O=ACME Corp/OU=IT Dept/CN=example.org"
參數說明
-nodes -newkey rsa:4096
生成 沒有加密的 private key,rsa:4096
是加密算法-keyout private.pem
key保存到 private.pem 這個文檔-out csr.pem
Csr 保存到 csr.pem 這個文檔-subj
csr 信息/C
Country Name 國家代碼,例如 EN TW 等/ST
State or Province Name ,省份/L
Locality Name/O
Organization Name 組織名稱/OU
Organizational Unit Name/CN
Common Name 通用名 例如 abc.com 或 *.abc.com
一行命令生成 private key 和 crt (自簽名 self signed cert)
openssl req -x509 -nodes -newkey rsa:4096 \
-keyout private.pem \
-out crt.pem \
-days 356 \
-subj "/C=TW/ST=Zuid Holland/L=Rotterdam/O=ACME Corp/OU=IT Dept/CN=example.org"
比上面的多了幾個參數
-x509
直接生成 crt-days 356
有效日期
一行命令生成 private key 和 csr 多個Domain
OpenSSL 1.1.1 或以上版本
openssl req -nodes -newkey rsa:4096 \
-keyout private.pem \
-out csr.pem \
-subj "/C=TW/ST=Zuid Holland/L=Rotterdam/O=ACME Corp/OU=IT Dept/CN=example.org"
-addext "subjectAltName = DNS:localhost,DNS:example.org"
OpenSSL 1.1.1 以下版本:
openssl req -nodes -newkey rsa:4096 \
-keyout private.pem \
-out csr.pem \
-subj "/C=TW/ST=Zuid Holland/L=Rotterdam/O=ACME Corp/OU=IT Dept/CN=example.org"
-extensions san \
-config <( \
echo '[req]'; \
echo 'distinguished_name=req'; \
echo '[san]'; \
echo 'subjectAltName=DNS:localhost,DNS:example.org')
使用比較流行的 ECC 编码
只要把 rsa:4096
替換為 ec:<(openssl ecparam -name secp384r1)
。
使用 openssl ecparam -list_curves
命令,可以查看 支持哪些ECC編碼。