本文改编自openssl官网openssl食谱
Nginx添加ssl模块:https://blog.csdn.net/qq_44637753/article/details/124141722?spm=1001.2014.3001.5501
最简单:
openssl genrsa > cert.key 2048 //生成私钥
openssl req -new -x509 -key cert.key >cert.pem //生成证书


Nginx添加ssl模块后,手动生成ssl私钥及证书。


一、密钥和证书管理

大多数用户转向 OpenSSL 是因为他们希望配置和运行支持 SSL 的 Web 服务器。该过程包括三个步骤:(1) 生成私钥,(2) 创建证书签名请求(CSR) 并将其发送给 CA,以及 (3) 在您的 Web 服务器中安装 CA 提供的证书。本节介绍了这些步骤(以及其他一些步骤)。

二、生成私钥

1.生成 RSA 密钥,使用以下 genpkey 命令:

$ openssl genpkey -out ssl.key  -algorithm RSA  -pkeyopt rsa_keygen_bits:2048  -aes-128-cbc 

输入 PEM 密码:************(至少四位)
验证 - 输入 PEM 密码:************

openssl rsa -in ssl.key -out ssl.key  ###使用此命令可去除密码,即使用nginx命令时取消密码输入

在这里,我指定使用 AES-128 保护密钥。也可以使用 AES-256(带有-aes-256-cbc开关),但最好远离其他算法(例如,DES、3DES 和 SEED)。

2.使用rsa命令查看密钥的结构:

$ openssl pkey -in ssl.key -text -noout
输入 ssl.key 的密码:******************

在这里插入图片描述

三、创建证书签名请求

拥有私钥后,您可以继续创建证书签名请求(CSR)。这是要求 CA 签署证书的正式请求,它包含请求证书的实体的公钥和有关该实体的一些信息。这些数据都将成为证书的一部分。CSR 始终使用与其携带的公钥对应的私钥进行签名。
如果您希望某个字段为空,则必须在该行输入一个点 ( .),而不是直接按 Return。如果您执行后者,OpenSSL 将使用默认值填充相应的 CSR 字段。

1.创建新证书签名请求(CSR):

$ openssl req -new -key ssl.key -out ssl.csr  
You are about to be asked to enter information that will be incorporated
into your certificate request.  ##您将被要求输入信息被合并
到您的证书请求中。
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.您将要输入的是所谓的专有名称或 DN。
有很多字段,但您可以留空
一些字段将有一个默认值,
如果输入'.',则该字段将留空。
-----
Country Name (2 letter code) [XX]:  ##国家名称(2 字母代码)[AU]:GB
State or Province Name (full name) []:. ##州或省名称(全名)[Some-State]:
Locality Name (eg, city) [Default City]:.   ##地区名称(例如,城市)[]:
Organization Name (eg, company) [Default Company Ltd]:.   ##组织名称(例如,公司)
Organizational Unit Name (eg, section) []:.  ##组织单位名称(例如,部分)
Common Name (eg, your name or your server's hostname) []:.  ##通用名称(例如服务器 FQDN 或您的姓名)域名/主机名。。。。
Email Address []:.   ##电子邮件地址

Please enter the following 'extra' attributes
to be sent with your certificate request  
##请输入以下“额外”属性,以与您的证书请求一起发送
A challenge password []:.   ##质询密码(可选字段)不建议
An optional company name []:.    ##可选的公司名称

生成 CSR 后,使用它来签署您自己的证书和/或将其发送到公共 CA 并要求它签署证书。

2.从现有证书创建(CSR):

如果您正在更新证书并且不想对证书中显示的信息进行任何更改,您可以节省一些输入。使用以下命令,您可以从现有证书创建全新的 CSR:

$ openssl x509 -x509toreq -in ssl.crt -out fd.csr -signkey ssl.key  

3.无人值守的 CSR 生成:

创建一个ssl.cnf文件:

[req]
prompt = no
distinguished_name = dn
req_extensions = ext
input_password = 1234

[dn]
CN = www.baidu.com
emailAddress = baidu@sina.com
O = Feisty Duck Ltd
L = London
C = GB

[ext]baidu
subjectAltName = DNS:www.bai'du.com,DNS:baidu.com

现在您可以直接从命令行创建 CSR:

$ openssl req -new -config ssl.cnf -key fd.key -out ssl.csr

四、签署您自己的证书

如果您正在为自己的使用或快速测试配置 TLS 服务器,有时您不希望去 CA 以获得公开信任的证书。使用自签名证书要容易得多。
如果您已有 CSR,请使用以下命令创建证书:

$ openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt 
Signature ok 
subject=C = GB, L = London, O = Feisty Duck Ltd, CN = 
www.baidu.com key
输入 ssl.key 的密码:****************

您实际上不必在单独的步骤中创建 CSR。以下命令创建仅以密钥开头的自签名证书:

$ openssl req -new -x509 -days 365 -key ssl.key -out ssl.crt

如果您不希望被问到任何问题,请使用-subj 开关在命令行上提供证书主题信息:

$ openssl req -new -x509 -days 365 -key ssl.key -out ssl.crt \ 
 -subj "/C=GB/L=London/O=Feisty Duck Ltd/CN=www.baidu.com"

五、PEM 和 DER 转换

PEM 和 DER 格式之间的证书转换是使用该 x509工具执行的。要将证书从 PEM 转换为 DER 格式:

$ openssl x509 -inform PEM -in ssl.pem -outform DER -out ssl.der
要将证书从 DER 转换为 PEM 格式:

$ openssl x509 -inform DER -in ssl.der -outform PEM -out ssl.pem
如果您需要在 DER 和 PEM 格式之间转换私钥,则语法是相同的,但使用了不同的命令:rsa用于 RSA 密钥和dsa用于 DSA 密钥。如果您正在处理新的 PKCS #8 格式,请使用该pkey工具。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐