返回博客

OpenSSL 基础:使用私钥、证书签名请求和 SSL 证书

OpenSSL 基础:使用私钥、证书签名请求和 SSL 证书

OpenSSL 是一个开源加密库,包含各种用于 TLS 协议公钥基础设施 的命令。OpenSSL 于 1998 年发布,适用于 Windows、Linux、macOS 和 BSD 系统。OpenSSL 命令将帮助您执行各种任务,包括证书签名请求 (CSR)、私钥生成和 SSL 证书。

OpenSSL 非常重要,因为它能确保正确的 SSL 实施。以正确的方式获取 SSL 对您网站的安全至关重要。此外,作为顶级搜索引擎的 Google 会优先考虑已实施 SSL 证书的网站。如果您没有正确的 SSL 证书,Chrome 和 Firefox 等某些浏览器可能会将您的网站标记为“不安全”。因此,通过加密的 HTTPS 协议传输您的网站流量至关重要。

首先

本教程是一个速查表风格的指南,包含了一些但可能并非全部您在日常场景中可能会用到的 OpenSSL 命令。

第一部分解释了您需要了解的关于 证书签名请求 (CSR) 的所有内容。但是,如果您已经熟悉它,可以跳到与您要实现的目标相关的任何其他部分。每个部分都包含一个命令行片段,用于完成副标题所述的操作。

让我们开始吧!

第 1 部分:了解证书签名请求 (CSR)

从证书颁发机构 (CA) 获取 SSL 证书时,证书签名请求是先决条件。CSR 包含密钥对的公钥和一些附加信息。您需要在签名过程中将它们插入到证书中。

在生成 CSR 期间,系统会提示您提供标识信息,这被称为区分名 (DN)。DN 包含证书所需的字段,例如通用名称 (CN),它是将使用该证书的主机的确切完全限定域名 (FQDN)。DN 的其他字段用于填写附加信息,例如国家、州/省、地区名称以及组织或业务名称(如果您正在生成针对您业务的特定证书)。您可以选择通过从文件或命令行提供信息来跳过这些提示。

请看下面屏幕截图中的 CSR 信息提示示例:

您可以通过添加如下所示的 -subj 标志并在单行命令中提供信息来避免提示,并提供各字段的信息:

上述命令采用与 CSR 信息提示代码块示例中显示的相同信息。

第 2 部分:生成证书签名请求

在本部分中,我们将介绍可用于生成 CSR 和私钥的 OpenSSL 命令。CSR 是向证书颁发机构 (CA) 申请 SSL 证书所必需的。

生成私钥和证书签名请求

如果您希望证书颁发机构颁发 SSL 证书以保护您的 ApacheNginx 服务器通过 HTTPS(即带有 TLS 的 HTTP)提供流量服务。使用该命令生成的 CSR 可以发送给 CA 以申请 CA 签名的 SSL 证书。您可以参考我们的详细指南来了解如何设置您的 ApacheNginx 服务器在 Ubuntu 上。

在终端中输入以下命令以从头生成一个 2048 位的私钥(domain.key)和 CSR(domain.csr):

根据提示输入您具体的 CSR 信息。或者,您可以在命令中添加 -subj 标志以跳过提示:

The -newkey rsa:2048 标志指定应使用 2048 位 RSA 算法生成密钥。而 -nodes 标志表示不对私钥进行密码加密。还有一个 -new 选项虽然未包含,但已隐含,表示生成新的 CSR。

从现有私钥生成证书签名请求

如果您已经拥有私钥,则可以使用此方法生成 CSR。然后,您将使用它向 CA 申请 SSL 证书。输入以下命令,使用现有的私钥(domain.csr)生成新的 CSR(domain.key):

根据提示输入您具体的 CSR 信息。或者,您可以在命令中添加 -subj 标志 以跳过提示:

The flag -key 标志指定了用于生成新 CSR 的现有私钥(domain.key)。而 -new 标志表示正在生成新的 CSR。

从现有证书和私钥生成证书签名请求

如果您已经拥有一个现有的证书,并希望使用它来生成 CSR,则可以使用此方法。如果您或您的 CA 丢失了原始 CSR,并且您需要使用之前输入的 CSR 信息来生成它而无需重新输入,则此方法非常有用。该命令会从现有证书中提取信息。在终端中输入以下命令,以创建新的 CSR(domain.csr),使用现有的 证书(domain.crt)和现有的私钥(domain.key):

-x509toreq 选项表示您正在使用 X509 证书 来生成 CSR。

第 3 部分:生成 SSL 证书

在某些情况下,您可能希望使用 SSL 证书,而无需繁琐地获取 CA 签名的证书。本节将介绍如何对您自己的证书进行签名。它是有效且免费的。这些证书被称为 自签名证书,并且它们非常常见。

自签名证书是使用其自身的私钥进行签名的。自签名证书和 CA 签名证书在加密数据和网站流量方面的效果一样好。然而,使用自签名证书时,用户通常会在浏览器中收到证书不可信的警告。因此,您可以将自签名证书用于不与用户交换敏感信息的网站,或用于非生产服务器。在下方,您可以找到用于生成自签名证书的 OpenSSL 命令。

  • 生成自签名证书

您可以使用此方法生成 SSL 证书来保护您的 Apache 或 Nginx 服务器。这将确保流量通过 HTTPS(即基于 TLS 的 HTTP)传输,而无需前往 CA 进行证书签名:

根据提示输入您特定的 CSR 信息。或者,您也可以在命令中添加 -subj 标志 以避免出现提示:

其中 -x509 标志表示创建自签名证书。 -days 365 选项指定证书的有效天数。在本例中为 365 天。您也可以选择不同的天数。该命令会生成一个临时 CSR,用于保存应与证书关联的信息。

  • 从现有私钥生成自签名证书

此方法将帮助您从已有的私钥生成自签名证书。输入以下命令以使用现有的私钥(domain.crt)生成自签名证书(domain.key):

根据提示输入您特定的 CSR 信息。或者,您也可以在命令中添加 -subj 标志 以避免出现提示:

其中 -x509 标志表示创建自签名证书。 -days 365 选项指定证书的有效天数。在本例中为 365 天。您也可以选择不同的天数。 -new 选项会启动 CSR 信息提示。

第 4 部分:查看证书

证书和 CSR 文件经过编码并以 .pem 后缀存储。它代表隐私增强邮件(Privacy-Enhanced Mail)。这是一种用于存储和发送加密密钥、证书和其他关键数据的文件格式。PEM 文件不易于人类直接阅读。在本节中,您将找到可用于查看编码 PEM 文件中条目的命令。

  • 查看 CSR 文件

在终端中输入以下命令以查看并验证 CSR(domain.csr)的内容:

例如,上述命令可能会输出类似以下的内容:

Viewing CSR files

  • 查看证书条目

输入以下命令以查看证书(domain.crt):

上述命令可能会输出类似以下的内容:

OpenSSL

  • 验证证书是否由证书颁发机构签名

要验证证书(domain.crt)是否由特定的 CA 证书(ca.crt)签名,请输入以下命令:

 

第 5 部分:私钥

如果您正在寻找创建和验证私钥所需的 OpenSSL 命令,本节内容正适合您。

  • 创建私钥

要创建一个受密码保护的 2048 位私钥(domain.key),请在终端中输入以下命令:

该命令将提示您输入密码以完成此过程。请参见下方截图:

Creating a Private Key

  • 验证私钥

要验证私钥(domain.key)的有效性,请在终端中输入以下命令:

然后,您需要提供密码。如果私钥已加密且您输入了正确的密码,终端上将显示未加密的密钥。请参见下方截图:

Verifying a Private Key

  • 验证私钥是否与证书和 CSR 匹配

如果您想检查私钥(domain.key)是否与证书(domain.crt)以及 CSR(domain.csr)匹配,请在终端中输入以下命令:

如果您发现上述命令的输出完全相同,那么私钥、证书和 CSR 很可能是相关联的。

  • 加密私钥

如果您有一个未加密的私钥(unencrypted.key)并且想要获取该密钥的加密版本(encrypted.key),请在终端中输入以下命令:

该命令将提示您输入密码以加密私钥。

  • 解密私钥

如果您有一个已加密的私钥(encrypted.key)并且想要获取其解密版本(decrypted.key),请在终端中输入以下命令:

该命令将提示您输入加密密钥的密码。如果您输入了正确的密码,它将被解密。输出将保存到 decrypted.key.

 

第 6 部分:转换证书格式

您可能已经注意到,到目前为止我们一直在使用 X.509 证书,这些证书是用 ASCII PEM 编码的。虽然这没什么问题,但您还可以使用其他多种证书编码和容器类型。在某些应用中,您可能更倾向于使用某些特定格式。此外,一些不同的格式可能在单个文件中包含多个项目,例如私钥、CSR 和 CA 签名的证书。您还可以使用 OpenSSL 在各种证书格式之间进行转换。继续阅读以了解一些用于证书格式转换的 OpenSSL 命令。

  • 将 PEM 转换为 DER

DER(可辨别编码规则)是一种用于 X.509 证书和私钥的二进制编码。要将 PEM 编码的证书(domain.crt)转换为 DER 编码的证书(domain.der),请输入以下命令:

您会发现 DER 编码格式的大多数使用场景都在 Java programming language 中。 请遵循此 tutorial for a quick set up of Java on your Ubuntu server.

  • 将 DER 转换为 PEM

要将 DER 编码的证书(domain.der)转换为 PEM 证书(domain.crt),请输入以下命令:

 

  • 将 PEM 转换为 PKCS7

您可能希望将 PEM 证书(例如 domain.crtca-chain.crt)添加到 PKCS7 文件(domain.p7b)中。以下是实现此操作的命令:

您可以使用 -certfile 选项多次指定要添加到 PKCS7 文件中的证书。PKCS7 文件主要与 Java 密钥库和 Microsoft IIS 相关。它们也被称为 P7B 文件,是包含证书和 CA 签名证书的 ASCII 文件。

  • 将 PKCS7 转换为 PEM

要将 PKCS7 文件(domain.p7b)转换为 PEM 编码的文件(domain.crt),请在终端中输入以下命令:

 

  • 将 PEM 转换为 PKCS12

要将私钥(domain.key)和证书(domain.crt)合并为一个 PKCS12 文件 (domain.pfx),请输入以下命令:

该命令将提示您输入导出密码,您也可以选择留空。您可以通过将多个证书合并到一个 PEM 文件 (domain.crt) 中,从而将这些证书链接到 PKCS12 文件。PKCS12 也称为 PFX,主要用于 Microsoft IIS.

  • 将 PKCS12 转换为 PEM

要将 PKCS12 文件 (domain.pfx) 转换为 PEM 编码格式 (domain.combined.crt),请输入以下命令:

由上述命令创建的 PEM 文件包含 PKCS12 所保存的所有多个项目。

第 7 部分:检查 OpenSSL 版本

您运行的任何软件的版本都可能会影响您运行的应用程序的功能。因此,有必要确定其版本。OpenSSL 也是如此。某些命令行选项可能在某个版本中缺失,但在另一个版本中可用。要查看您正在运行的 OpenSSL 版本,请输入以下命令:

以下是我们在创建本教程时运行上述命令所获得的输出:

您可以在下方找到实际的屏幕截图:

OpenSSL

结论

在本教程中,我们解释了什么是 OpenSSL,介绍了证书签名请求 (CSR) 以及您可以在服务器环境中使用的某些关键 OpenSSL 命令。

我们是否遗漏了某个关键命令,或者您在服务器设置中运行以下平台上的任何命令时遇到问题:CloudSigma?欢迎随时联系我们的24/7 客户支持团队进行实时聊天以讨论该问题。

祝您使用愉快!

author

Manpreet Singh

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的创意设计师,专注于通过传统和创新营销渠道打造一致的企业形象。他擅长将艺术愿景与战略营销相融合,创造具有影响力的品牌叙事。

评论

暂无评论。发表第一条评论吧。