OpenSSL 生成private key 、csr、crt

關於生成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編碼。