如何使用 OpenSSL 生成 SSL 证书、私钥和 CSR


OpenSSL 是一个 CLI(命令行工具),可用于保护服务器,生成公钥基础设施 (PKI) 和 HTTPS。本文帮助您快速参考了解 OpenSSL 命令,这些命令在日常场景中非常有用,尤其适用于系统管理员。

证书签名请求 (CSR)

如果我们想从证书颁发机构 (CA) 获取 SSL 证书,则必须生成证书签名请求 (CSR)。CSR 主要包含密钥对的公钥,以及一些其他信息。这两个组件在为 CSR 签名时合并到证书中。

在生成 CSR 时,系统会提示输入有关证书的信息,此信息称为可分辨名称 (DN)。DN 中的重要字段是通用名称 (CN),它应该是服务器或我们打算在其中使用证书的主机的 FQDN(完全限定域名)。

DN 中的下一个项目是提供有关我们的业务或组织的其他信息。如果我们从证书颁发机构 (CA) 购买 SSL 证书,则这些其他字段(如“组织”)必须反映您的组织详细信息,这一点非常重要且必不可少。

以下是我们运行 OpenSSL 命令生成 CSR 时 CSR 信息提示的通用示例。

Country Name (2 letter code) [US]:IN
State or Province Name (full name) [Some-State]:Telengana
Locality Name (eg, city) []:Hyderabad
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ansole Pvt Ltd.
Organizational Unit Name (eg, section) []:Application
Common Name (e.g. server FQDN or YOUR name) []:domainname.com
Email Address []:[email protected]

我们还可以通过非交互式答案提供 CSR 信息生成的信息,可以通过将 –subj 选项添加到我们尝试生成或运行的任何 OpenSSL 命令来实现。

以下是 –subj 选项的示例,其中我们可以提供我们想要使用此 CSR 的组织的信息。

-subj "/C=IN/ST=Telengana/L=Hyderabad/O=Ansole Pvt Ltd/CN=domainname.com"

生成 CSR

在本节中,我们将介绍与生成 CSR 相关的 OpenSSL 命令。此 CSR 可用于向证书颁发机构请求 SSL 证书。

生成私钥和 CSR

如果我们想使用 HTTPS(HTTP over TLS)来保护 Apache 或 Nginx Web 服务器(使用证书颁发机构 (CA) 来颁发 SSL 证书)。此外,我们将生成的“.CSR”必须发送到 CA 以请求证书以获取 CA 签名的 SSL。

以下是从头开始为“domain.key”创建 2048 位私钥和“domain.csr”的 CSR 的命令。

$ openssl req -newkey rsa:2048 -nodes -keyout domain.key -out domain.csr
Generating a 2048 bit RSA private key
..............................+++
.......................................+++
writing new private key to 'domain.key'
-----
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.
-----
Country Name (2 letter code) [AU]:IN
State or Province Name (full name) [Some-State]:Telengana
Locality Name (eg, city) []:Hyderabad
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ansol Pvt Ltd
Organizational Unit Name (eg, section) []:Application
Common Name (e.g. server FQDN or YOUR name) []:domainname.com
Email Address []:[email protected]

“–newkey rsa:2048”是我们指定的选项,即密钥应使用 RSA 算法为 2048 位。' –nodes' 选项表示私钥不应使用密码短语加密。' -new' 选项表示正在生成 CSR。

从现有私钥生成 CSR

在这里,我们将了解如何为已拥有私钥的 CSR 生成 CSR。

以下是基于我们已有的私钥创建新的 .csr 文件的命令。

$ openssl req -key domain.key -new -out domain.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.
-----
Country Name (2 letter code) [AU]:IN
State or Province Name (full name) [Some-State]:Telengana
Locality Name (eg, city) []:Hyderabad
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ansol Pvt Ltd
Organizational Unit Name (eg, section) []:Applicatoin
Common Name (e.g. server FQDN or YOUR name) []:domainname.com
Email Address []:[email protected]

从现有证书和私钥生成 CSR

在这里,我们可以生成或续订现有证书,由于某些原因我们错过了 CSR 文件。在这里,CSR 将使用我们拥有的 .CRT 文件提取信息。

以下是生成示例 -

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

其中 -x509toreq 指定我们正在使用 x509 证书文件来制作 CSR。

生成自签名证书

在这里,我们将生成证书以保护 Web 服务器,我们使用自签名证书用于开发和测试目的。

$ openssl req -newkey rsa:2048 -nodes -keyout domain.key-x509 -days 365 -out domain.crt
Generating a 2048 bit RSA private key
................+++
.......................................................+++
writing new private key to 'domain.key'
-----
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.
-----
Country Name (2 letter code) [AU]:IN
State or Province Name (full name) [Some-State]:Telengana
Locality Name (eg, city) []:Hyderabad
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ansol Pvt Ltd
Organizational Unit Name (eg, section) []:Application
Common Name (e.g. server FQDN or YOUR name) []:domainname.com
Email Address []:[email protected]

在这里,我们使用 –x509 选项生成自签名证书,我们可以使用 –days 365 生成有效期为 365 天的证书,并且使用上述信息生成临时 .CSR 文件。

查看证书文件

请注意,CSR 文件使用 .PEM 格式编码(人类无法读取)。需要查看证书。在本节中,我们可以介绍使用 .PEM 文件编码的 OpenSSL 命令。

查看 CSR 文件条目

以下命令用于以纯文本格式查看 .CRT 文件 Ex(domain.crt)的内容。

$ sudo openssl x509 -text -noout -in domain.crt
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 9717655772991591277 (0x86dc0c706eb0136d)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=IN, ST=Telengana, L=Hyderabad, O=Ansol Pvt Ltd, OU=Application , CN=domainname.com/[email protected]
Validity
Not Before: Jun 13 14:23:52 2016 GMT
Not After : Jun 13 14:23:52 2017 GMT
Subject: C=IN, ST=Telengana, L=Hyderabad, O=Ansol Pvt Ltd, OU=Applicatio n, CN=domainname.com/[email protected]
….

使用私钥

在本节中,我们将了解如何使用特定于创建和验证私钥的 OpenSSL 命令。

创建私钥

以下是创建受密码保护且 2048 位加密的私钥文件(例如 domain.key)的命令 -

$ openssl genrsa -des3 -out domain.key 2048

出现提示时输入密码以完成该过程。

验证私钥

以下是检查我们生成的私钥(例如:domain.key)是否为有效密钥的命令

$ openssl rsa -check -in domain.key

如果私钥已加密,系统将提示您输入密码短语。成功输入后,未加密的密钥将作为终端输出。

在本文中,我们学习了一些 OpenSSL 命令及其用法,这些命令处理 SSL 证书,其中 OpenSSL 具有许多功能。我们将在未来学习更多功能和用法。我希望本文能帮助我们了解 OpenSSL 的一些基本功能。

更新于: 2019 年 10 月 18 日

3K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始
广告