生成SSL证书可能是一项艰巨的任务,充满了挫折和悲伤。但事实并非如此!如果你使用Windows 10并且拥有OpenSSL,再加上这篇教程的一点帮助,你就能轻松搞定。
在本文中,你将学习如何在Windows 10上安装OpenSSL。安装完成后,你将能够生成SSL证书,调试和排除证书问题,并在不同格式之间进行转换。
让我们从在Windows 10上使用PowerShell掌握OpenSSL开始吧!
相关链接:使用Windows证书管理器和PowerShell管理证书
先决条件
在本文中,你将通过动手实践来学习。虽然OpenSSL一直是Linux操作系统的实用工具,但你也可以在Windows操作系统上使用它。
- A Windows system with Local Administrator rights – The tutorial will be using Windows 10
- 需要Windows PowerShell 5.1(随Windows提供)或PowerShell 7
- Chocolatey – 一个Windows的包管理器已安装。
- PowerShell ISE,Visual Studio Code或任何你喜欢的文本编辑器
本指南中的所有截图均来自Windows 10版本1909和PowerShell 7。
使用PowerShell和Chocolatey在Windows 10上安装OpenSSL
假设您已经按照安装说明安装了Chocolatey,您的第一个任务是在Windows 10上安装OpenSSL。要做到这一点,请打开PowerShell控制台,并运行下面的命令choco install OpenSSL.Light
,如下所示。

就是这样!您现在已经使用PowerShell安装了OpenSSL。
设置工作目录
本教程将创建一些证书以供学习。为了确保您在这里进行的所有工作都限于一个可以稍后清理的文件夹中,请创建一个文件夹。
本教程将在C:\certs文件夹中存储所有证书和相关文件。您可以通过运行以下命令在PowerShell中创建一个文件夹。
现在是时候配置OpenSSL了。
配置OpenSSL
默认情况下,Windows 10上的OpenSSL不附带配置文件。这是有意为之的,因为你可以自定义很多配置选项。为了本指南的目的,您将使用一个示例配置文件,稍后可以根据您的安全要求进行自定义。
打开PowerShell并运行下面的命令。此命令从MIT下载一个示例配置文件,并将其保存为当前工作目录中的openssl.cnf。
现在您可以打开openssl.cnf文件,应该看到类似下面的内容。

下载的配置现在将原样工作。在生产环境中不要使用默认值!
更新PowerShell配置文件环境变量
为了使一切顺利进行,您应该修改在Windows 10上的PowerShell配置文件。设置一些环境变量可以让您轻松切换可能已安装的不同版本的OpenSSL。
I suggest adding two environment variables to your PowerShell profile called path
and OPENSSL_CONF
. You will update the PATH
environment variable to ensure you can run the openssl binary in any location while on the command line.
在下面,您将看到如果您还没有PowerShell配置文件,则创建一个的方法。此命令将OpenSSL二进制路径附加到您的PATH
并将配置文件路径分配给OPENSSL_CONF
。
要使用环境变量,请重新加载您的配置文件,键入. $profile
或只需关闭并重新打开PowerShell。
现在,您可以在PowerShell中的任何位置轻松调用openssl二进制文件,如下所示。

在Windows 10上使用OpenSSL生成CSR和私钥
在创建 SSL 证书之前,您必须生成一个证书签名请求(CSR)。CSR 是一个编码文件,它为您提供了一种与证书颁发机构(CA)共享您的公钥的方式。该文件包含识别信息、签名算法和数字签名。让我们创建您的第一个 CSR 和私钥。
要创建 CSR,请运行以下命令。然后 OpenSSL 将提示您输入一些识别信息,如下面的演示所示。

完成后,您将获得一个有效的 CSR 和私钥,可用于为您颁发 SSL 证书。
配置文件的默认设置可以进一步编辑,以简化此过程,如果您不想每次生成 CSR 都输入数据的话。
您可以阅读更多关于可用 CSR 选项的信息,并查看手册中的示例配置。OpenSSL 也有一个活跃的GitHub 仓库,其中也有示例。
生成 RSA 密钥对
您还可以使用 OpenSSL 创建 RSA 密钥对(公钥/私钥)。要这样做,首先使用下面所示的 genrsa
子命令创建一个私钥。
当您运行以下命令时,Windows 10 上的 OpenSSL 将生成一个长度为 2048 位的 RSA 私钥。这个密钥几乎立即在现代硬件上生成。生成的密钥将输出到工作目录中。
接下来,使用刚刚创建的私钥使用 rsa
子命令生成一个公钥。下面的语法将从 rsa.private 私钥在工作目录中创建一个名为 rsa.public 的公钥。
生成自签名证书
偶尔您可能需要生成一个 自签名证书。自签名证书可以在实验中使用,但在生产环境中使用不是一种安全的做法。
在继续下一个任务之前,让我们创建一个自签名证书。为此,请输入以下命令以创建一个 X509 SSL 证书。此证书将使用 SHA256 加密,有效期为 365 天,使用 2048 位的 RSA 密钥长度。证书将保存到工作目录中。
现在您可以将证书导入浏览器或服务器。
使用 OpenSSL 验证 CSR、证书和密钥
检查 CSR、私钥、证书或 PKCS#12 中的信息可以帮助您节省排查 SSL 错误的时间。有时,可能会错误地使用了错误的密钥来创建证书。例如,您的证书中可能包含错误的标识信息。
让我们从使用 req
命令和一些参数来检查 CSR 开始:

在本指南开头创建 CSR 时输入的详细信息,如国家名称、组织名称和电子邮件地址,应完全匹配。
您还可以使用带有一些参数的 x509
子命令来检查证书:

使用 OpenSSL 转换证书
有时应用程序可能不使用特定的证书格式。例如,您可能在名为 HAproxy 的应用程序中遇到此问题,该应用程序需要 PEM 证书,而您可能拥有 DER 格式的证书(.crt .cer .der)。
为了演示如何转换证书,让我们将之前创建的自签名证书(以 DER 格式保存,文件名为 certificate.crt)转换为 PEM 格式。请使用以下代码段中的代码进行转换。
下面的命令使用了 x509
子命令和 -inform
参数,该参数应与 -in
文件的格式匹配,然后是 -out
格式。
如果您希望将 PEM 格式转换为 DER 格式,也可以按照下面所示的顺序颠倒。
最后但同样重要的是,您可以将PKCS#12转换为PEM格式,也可以将PEM转换为PKCS#12格式。这是一种包含私钥和证书的文件类型。要转换为PEM格式,请使用pkcs12
子命令。
您还可以使用-export
以及一些额外的选项将PEM证书和私钥转换为PKCS#12格式。下面是一个示例,使用SomeCertificate.crt
作为输入源导出PKCS#12格式的证书。使用-certfile
选项值MyCACert.crt
可以验证SomeCertificate.crt
。
故障排除与调试
现在您可以创建和转换CSR、证书和密钥对了,是时候学习如何排除故障和调试了。OpenSSL提供了一些命令,使排查问题变得轻而易举。
OpenSSL还允许您检查证书的文件完整性并测试可能的数据损坏。使用MD5校验和,您可以使用以下代码示例来测试证书、密钥和CSR:
一旦您获得了原始哈希值,您就可以将其与当前哈希值进行比较,以验证证书是否已被修改或损坏。
以下是在PowerShell中运行该代码时的示例:

摘要
在本文中,您学习了如何在Windows 10上安装和配置OpenSSL,创建CSR、密钥对和SSL证书。您还学习了如何在不同证书格式之间转换,并使用内置子命令进行一些基本故障排除。