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)等信息。
总结:
- 准备 OpenSSL 配置文件 (openssl.conf): 创建一个包含 SAN 的配置文件,确保不依赖于过时的 Common Name(CN)。
- 生成私钥和证书签名请求(CSR): 使用以下命令生成私钥和 CSR:bash复制编辑openssl req -new -newkey rsa:2048 -days 365 -nodes -keyout private/server.key -out certs/server.csr -config ./openssl.conf
- 使用私钥签署证书: 使用私钥签署 CSR,生成证书:bash复制编辑openssl x509 -req -in certs/server.csr -signkey private/server.key -out certs/server.crt -extensions v3_req -extfile ./openssl.conf
- 验证证书: 使用以下命令查看证书的详细信息,确保 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)等信息。
总结:
- 准备 OpenSSL 配置文件 (openssl.conf): 创建一个包含 SAN 的配置文件,确保不依赖于过时的 Common Name(CN)。
- 生成私钥和证书签名请求(CSR): 使用以下命令生成私钥和 CSR:bash复制编辑openssl req -new -newkey rsa:2048 -days 365 -nodes -keyout private/server.key -out certs/server.csr -config ./openssl.conf
- 使用私钥签署证书: 使用私钥签署 CSR,生成证书:bash复制编辑openssl x509 -req -in certs/server.csr -signkey private/server.key -out certs/server.crt -extensions v3_req -extfile ./openssl.conf
- 验证证书: 使用以下命令查看证书的详细信息,确保 SANs 配置正确:bash复制编辑openssl x509 -in certs/server.crt -text -noout
通过这个流程,你就可以生成一个带有 SANs 的证书,避免了过时的 Common Name(CN)字段问题,并确保可以在现代的 TLS 配置中使用。
评论(0)