本文改编自openssl官网openssl食谱
Nginx添加ssl模块:
最简单:
openssl genrsa > cert.key 2048 //生成私钥
openssl req -new -x509 -key cert.key >cert.pem //生成证书
openssl生成crt、key
- 一、密钥和证书管理
- 二、生成私钥
- 1.生成 RSA 密钥,使用以下 genpkey 命令:
- 2.使用rsa命令查看密钥的结构:
- 三、创建证书签名请求
- 1.创建新证书签名请求(CSR):
- 2.从现有证书创建(CSR):
- 3.无人值守的 CSR 生成:
- 四、签署您自己的证书
- 五、PEM 和 DER 转换
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工具。