openssl制作证书过程


完整证书生成流程

1. 准备 OpenSSL 配置文件 (openssl.conf)

首先,创建一个 openssl.conf 配置文件,确保它包含 SANs(Subject Alternative Names),以避免使用过时的 Common Name(CN)字段。

[ req ]
default_bits        = 2048
default_keyfile     = privkey.pem
distinguished_name  = req_distinguished_name
x509_extensions     = v3_req
prompt              = no

[ req_distinguished_name ]
countryName         = CN
stateOrProvinceName = Xian
localityName        = Changan
organizationName    = Personal
commonName          = localhost

[ v3_req ]
subjectAltName      = @alt_names

[ alt_names ]
DNS.1               = localhost.com
DNS.2               = www.localhost.com
DNS.3               = localhost

解释:

  • req: 定义了证书请求的一些基本参数。
  • req_distinguished_name: 包含了证书请求中的字段(如国家、组织等)。
  • v3_req: 定义了 SANs,确保证书不会仅依赖于 commonName,而是使用 subjectAltName。
  • alt_names: 允许为证书添加多个 DNS 名称。

2. 生成私钥和证书签名请求(CSR)

执行以下命令来生成一个私钥和证书签名请求(CSR)。这个命令会用到你刚才创建的 openssl.conf 配置文件。

openssl req -new -newkey rsa:2048 -days 365 -nodes -keyout private/server.key -out certs/server.csr -config ./openssl.conf

解释:

  • -new: 创建一个新的证书签名请求。
  • -newkey rsa:2048: 创建一个新的 2048 位 RSA 密钥对。
  • -days 365: 设置证书的有效期为 365 天。
  • -nodes: 不加密私钥(即不设置密码)。
  • -keyout private/server.key: 输出私钥文件的位置。
  • -out certs/server.csr: 输出证书签名请求文件的位置。
  • -config ./openssl.conf: 使用指定的配置文件 openssl.conf,该文件包含了关于证书的各种信息。

执行此命令后,你会得到一个新的私钥文件 private/server.key 和证书签名请求文件 certs/server.csr

3. 使用私钥签署证书

使用私钥来签署证书请求,从而生成最终的证书。执行以下命令:

openssl x509 -req -in certs/server.csr -signkey private/server.key -out certs/server.crt -extensions v3_req -extfile ./openssl.conf

解释:

  • -req: 表示这是一个证书签名请求(CSR)。
  • -in certs/server.csr: 输入文件为你之前生成的证书签名请求(CSR)。
  • -signkey private/server.key: 使用你之前生成的私钥来签署证书。
  • -out certs/server.crt: 输出签署后的证书文件。
  • -extensions v3_req: 在签署证书时使用 v3_req 扩展部分,这部分会定义证书的 Subject Alternative Name(SAN)。
  • -extfile ./openssl.conf: 使用配置文件 openssl.conf 来获取扩展信息(如 SAN)。

执行此命令后,生成的证书文件 server.crt 就是你的证书,可以用来进行 TLS/SSL 加密通信。

4. 验证证书内容

你可以使用以下命令来查看证书的详细信息,确保它包含了正确的扩展信息和 SANs。

openssl x509 -in certs/server.crt -text -noout

该命令将打印证书的内容,包括 Subject Alternative Name(SAN)等信息。

总结:

  1. 准备 OpenSSL 配置文件 (openssl.conf): 创建一个包含 SAN 的配置文件,确保不依赖于过时的 Common Name(CN)。
  2. 生成私钥和证书签名请求(CSR): 使用以下命令生成私钥和 CSR:bash复制编辑openssl req -new -newkey rsa:2048 -days 365 -nodes -keyout private/server.key -out certs/server.csr -config ./openssl.conf
  3. 使用私钥签署证书: 使用私钥签署 CSR,生成证书:bash复制编辑openssl x509 -req -in certs/server.csr -signkey private/server.key -out certs/server.crt -extensions v3_req -extfile ./openssl.conf
  4. 验证证书: 使用以下命令查看证书的详细信息,确保 SANs 配置正确:bash复制编辑openssl x509 -in certs/server.crt -text -noout

完整证书生成流程

1. 准备 OpenSSL 配置文件 (openssl.conf)

首先,创建一个 openssl.conf 配置文件,确保它包含 SANs(Subject Alternative Names),以避免使用过时的 Common Name(CN)字段。

[ req ]
default_bits        = 2048
default_keyfile     = privkey.pem
distinguished_name  = req_distinguished_name
x509_extensions     = v3_req
prompt              = no

[ req_distinguished_name ]
countryName         = CN
stateOrProvinceName = Xian
localityName        = Changan
organizationName    = Personal
commonName          = localhost

[ v3_req ]
subjectAltName      = @alt_names

[ alt_names ]
DNS.1               = localhost.com
DNS.2               = www.localhost.com
DNS.3               = localhost

解释:

  • req: 定义了证书请求的一些基本参数。
  • req_distinguished_name: 包含了证书请求中的字段(如国家、组织等)。
  • v3_req: 定义了 SANs,确保证书不会仅依赖于 commonName,而是使用 subjectAltName。
  • alt_names: 允许为证书添加多个 DNS 名称。

2. 生成私钥和证书签名请求(CSR)

执行以下命令来生成一个私钥和证书签名请求(CSR)。这个命令会用到你刚才创建的 openssl.conf 配置文件。

openssl req -new -newkey rsa:2048 -days 365 -nodes -keyout private/server.key -out certs/server.csr -config ./openssl.conf

解释:

  • -new: 创建一个新的证书签名请求。
  • -newkey rsa:2048: 创建一个新的 2048 位 RSA 密钥对。
  • -days 365: 设置证书的有效期为 365 天。
  • -nodes: 不加密私钥(即不设置密码)。
  • -keyout private/server.key: 输出私钥文件的位置。
  • -out certs/server.csr: 输出证书签名请求文件的位置。
  • -config ./openssl.conf: 使用指定的配置文件 openssl.conf,该文件包含了关于证书的各种信息。

执行此命令后,你会得到一个新的私钥文件 private/server.key 和证书签名请求文件 certs/server.csr

3. 使用私钥签署证书

使用私钥来签署证书请求,从而生成最终的证书。执行以下命令:

bash复制编辑openssl x509 -req -in certs/server.csr -signkey private/server.key -out certs/server.crt -extensions v3_req -extfile ./openssl.conf

解释:

  • -req: 表示这是一个证书签名请求(CSR)。
  • -in certs/server.csr: 输入文件为你之前生成的证书签名请求(CSR)。
  • -signkey private/server.key: 使用你之前生成的私钥来签署证书。
  • -out certs/server.crt: 输出签署后的证书文件。
  • -extensions v3_req: 在签署证书时使用 v3_req 扩展部分,这部分会定义证书的 Subject Alternative Name(SAN)。
  • -extfile ./openssl.conf: 使用配置文件 openssl.conf 来获取扩展信息(如 SAN)。

执行此命令后,生成的证书文件 server.crt 就是你的证书,可以用来进行 TLS/SSL 加密通信。

4. 验证证书内容

你可以使用以下命令来查看证书的详细信息,确保它包含了正确的扩展信息和 SANs。

openssl x509 -in certs/server.crt -text -noout

该命令将打印证书的内容,包括 Subject Alternative Name(SAN)等信息。

总结:

  1. 准备 OpenSSL 配置文件 (openssl.conf): 创建一个包含 SAN 的配置文件,确保不依赖于过时的 Common Name(CN)。
  2. 生成私钥和证书签名请求(CSR): 使用以下命令生成私钥和 CSR:bash复制编辑openssl req -new -newkey rsa:2048 -days 365 -nodes -keyout private/server.key -out certs/server.csr -config ./openssl.conf
  3. 使用私钥签署证书: 使用私钥签署 CSR,生成证书:bash复制编辑openssl x509 -req -in certs/server.csr -signkey private/server.key -out certs/server.crt -extensions v3_req -extfile ./openssl.conf
  4. 验证证书: 使用以下命令查看证书的详细信息,确保 SANs 配置正确:bash复制编辑openssl x509 -in certs/server.crt -text -noout

通过这个流程,你就可以生成一个带有 SANs 的证书,避免了过时的 Common Name(CN)字段问题,并确保可以在现代的 TLS 配置中使用。


文章标签:

评论(0)