当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] Windows 10 上卓越的 OpenSSL (PowerShell)

作者:精品下载站 日期:2024-12-14 13:05:28 浏览:17 分类:玩电脑

Windows 10 上卓越的 OpenSSL (PowerShell)


生成 SSL 证书可能是一项艰巨的任务,充满了挫败感和悲伤。但事实并非一定如此!如果您拥有 Windows 10 和 OpenSSL 以及本教程的一些帮助,那么您将会顺利上路。

在本文中,您将学习如何在 Windows 10 上安装 OpenSSL。安装后,您将生成 SSL 证书、排除故障和调试证书以及在格式之间进行转换。

让我们开始在 Windows 10 上使用 PowerShell 掌握 OpenSSL!

相关:使用 Windows 证书管理器和 PowerShell 管理证书

先决条件

在本文中,您将使用实践方法进行学习。虽然 OpenSSL 历史上是一个 Linux 操作系统实用程序,但您也可以在 Windows 操作系统中使用它。

  • 具有本地管理员权限的 Windows 系统 - 本教程将使用 Windows 10
  • Windows PowerShell 5.1(Windows 附带)或 PowerShell 7
  • Chocolatey - Windows 上安装的包管理器。
  • PowerShell ISE、Visual Studio Code 或您选择的任何文本编辑器

本指南中的所有屏幕截图均取自 Windows 10 build 1909 和 PowerShell 7。

使用 PowerShell 和 Chocolatey 在 Windows 10 上安装 OpenSSL

假设您已按照安装说明安装了 Chocolatey,您的第一个任务是在 Windows 10 上安装 OpenSSL。为此,请打开 PowerShell 控制台并运行 choco install OpenSSL.Light,如下所示。

[玩转系统] Windows 10 上卓越的 OpenSSL (PowerShell)

就是这样!您现在已经使用 PowerShell 安装了 OpenSSL。

设置工作目录

本教程将创建一些可供学习的证书。为了确保您在此处所做的所有工作都限制在一个文件夹中(您可以稍后清理),请继续创建一个文件夹。

本教程将把所有证书和相关文件存储在C:\certs文件夹中。您可以通过运行以下命令使用 PowerShell 创建文件夹。

New-Item -ItemType Directory -Path C:\certs

现在是时候配置 OpenSSL 了。

配置 OpenSSL

默认情况下,Windows 10 上的 OpenSSL 不附带配置文件。这是有意为之的,因为您可以自定义许多配置选项。出于本指南的目的,您将使用一个示例配置,您可以稍后自定义该配置以最适合您的安全要求。

打开 PowerShell 并运行以下命令。此命令从 MIT 下载示例配置文件,并将其保存为当前工作目录中的 openssl.cnf。

Invoke-WebRequest 'http://web.mit.edu/crypto/openssl.cnf' -OutFile .\openssl.cnf

您现在可以打开 openssl.cnf 文件,您应该会看到如下所示的内容。

[玩转系统] Windows 10 上卓越的 OpenSSL (PowerShell)

下载的配置目前将按原样运行。不要在生产环境中使用默认值!

更新 PowerShell 配置文件环境变量

为了使事情顺利进行,您应该在 Windows 10 上修改您的 PowerShell 配置文件。设置一些环境变量可以让您轻松地在可能已安装的不同版本的 OpenSSL 之间切换。

我建议向您的 PowerShell 配置文件添加两个环境变量,分别为 pathOPENSSL_CONF。您将更新 PATH 环境变量,以确保您可以在命令行上的任何位置运行 openssl 二进制文件。

如果您还没有 PowerShell 配置文件,您将在下面看到一种创建 PowerShell 配置文件的方法。此命令将 OpenSSL 二进制路径附加到您的 PATH 并将配置文件路径分配给 OPENSSL_CONF

# Add environment variables to PowerShell profile
# Test for a profile, if not found create one!
if (-not (Test-Path $profile) ) {
    New-Item -Path $profile -ItemType File -Force
}

# Edit profile to add these lines
'$env:path = "$env:path;C:\Program Files\OpenSSL\bin"' | Out-File $profile -Append
'$env:OPENSSL_CONF = "C:\certs\openssl.cnf"' | Out-File $profile -Append

要使用环境变量,请重新加载您的配置文件并输入 。 $profile 或者只是关闭并重新打开 PowerShell。

现在,无论您在 PowerShell 中的任何位置,都可以轻松调用 openssl 二进制文件,如下所示。

[玩转系统] Windows 10 上卓越的 OpenSSL (PowerShell)

在 Windows 10 上使用 OpenSSL 生成 CSR 和私钥

在创建 SSL 证书之前,您必须生成证书签名请求 (CSR)CSR 是一个编码文件,它为您提供了一种与证书颁发机构 (CA) 共享公钥的方法。该文件包含识别信息、签名算法和数字签名。让我们创建您的第一个 CSR 和私钥。

相关:面向凡人的 X509 证书指南

要创建 CSR,请运行以下命令。然后,OpenSSL 将提示您输入一些识别信息,如以下演示中所示。

openssl req -new -out MyFirst.csr

[玩转系统] Windows 10 上卓越的 OpenSSL (PowerShell)

完成后,您将拥有有效的 CSR 和私钥,可用于向您颁发 SSL 证书。

如果您不想每次生成 CSR 时都输入数据,则可以进一步编辑配置文件默认值以简化此过程。

您可以在手册页中阅读有关可用 CSR 选项的更多信息并查看示例配置。 OpenSSL 还有一个活跃的 GitHub 存储库,其中也包含示例。

生成 RSA 密钥对

您还可以使用 OpenSSL 创建 RSA 密钥对(公共/私有)。为此,首先使用 genrsa 子命令创建私钥,如下所示。

当您运行以下命令时,Windows 10 上的 OpenSSL 将生成密钥长度为 2048 位的 RSA 私钥。该密钥在现代硬件上几乎立即生成。生成的密钥输出到工作目录中

# generate a private key using maximum key size of 2048
# key sizes can be 512, 758, 1024, 1536 or 2048. 
openssl genrsa -out rsa.private 2048

接下来,使用您刚刚使用 rsa 子命令创建的私钥生成公钥。下面的语法将根据 rsa.private 私钥在工作目录中创建一个名为 rsa.public 的公钥。

# generate a public key using the private key
openssl rsa -in rsa.private -out rsa.public -pubout -outform PEM

生成自签名证书

有时您可能需要生成自签名证书。自签名证书适合实验室使用,但在生产环境中使用并不安全。

在继续下一个任务之前,让我们创建一个自签名证书。为此,请输入以下命令来创建 X509 SSL 证书。该证书将使用 SHA256 加密技术,使用 2048 位的 RSA 密钥长度,其有效期为 365 天。证书将保存到工作目录中。

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

您现在已准备好将证书导入浏览器或服务器。

使用 OpenSSL 验证 CSR、证书和密钥

检查 CSR、私钥、证书或 PKCS#12 中的信息可以节省您排除 SSL 错误的时间。例如,有时可能会使用错误的密钥来创建证书。您的证书中的识别信息可能有误。

让我们首先使用 req 命令和一些参数检查 CSR:

openssl req -text -noout -verify -in .\MyFirst.csr

[玩转系统] Windows 10 上卓越的 OpenSSL (PowerShell)

国家/地区名称、组织名称以及您在本指南开头创建 CSR 时输入的电子邮件地址等详细信息应精确匹配。

您还可以使用带有几个参数的 x509 子命令检查证书:

openssl x509 -in .\certificate.crt -text -noout | more

[玩转系统] Windows 10 上卓越的 OpenSSL (PowerShell)

使用 OpenSSL 转换证书

有时应用程序不使用特定的证书格式。您可能会在使用名为 HAproxy 的应用程序时遇到此问题,例如,当您可能拥有 DER 格式的证书 (.crt .cer .der) 时,该应用程序需要 PEM 证书。

为了演示如何转换证书,我们将之前以 DER 格式创建的自签名证书 (certificate.crt) 转换为 PEM。使用以下代码片段中的代码来执行此操作。

下面的命令使用 x509 子命令以及 -inform 参数,该参数应与 -in 文件的格式匹配,后跟 -out 格式。

openssl x509 -inform der -in .\certificate.crt -out .\certificate.pem

如果您也想从 PEM 获取 DER 格式,也可以颠倒顺序,如下所示。

openssl x509 -outform der -in .\certificate.pem -out .\certificate.der

最后但并非最不重要的一点是,您可以将 PKCS#12 转换为 PEM,并将 PEM 转换为 PKCS#12。这是包含私钥和证书的文件类型。要转换为 PEM 格式,请使用 pkcs12 子命令。

openssl pkcs12 -in .\SomeKeyStore.pfx -out .\SomeKeyStore.pem -nodes

您还可以使用 -export 和一些附加选项将 PEM 证书和私钥转换为 PKCS#12 格式。下面,您将使用 SomeCertificate.crt 作为输入源,使用您的私钥导出 PKCS#12 格式的证书。使用 -certfile 选项值 MyCACert.crt 允许您验证 SomeCertificate.crt

openssl pkcs12 -export -out SomeCertificate.pfx -inkey SomePrivateKey.key -in SomeCertificate.crt -certfile MyCACert.crt

故障排除和调试

现在您可以创建和转换 CSR、证书和密钥对,是时候学习如何对它们进行故障排除和调试了。 OpenSSL 附带的命令可以轻松解决问题。

OpenSSL 还允许您检查证书的文件完整性并测试可能的数据损坏。使用 MD5 校验和,您可以使用以下代码示例来测试证书、密钥和 CSR:

# Certificates
openssl x509 -noout -modulus -in .\certificate.crt | openssl md5

# Public / Private Keys
openssl rsa -noout -modulus -in .\privateKey.key | openssl md5

# Certificate Server Request
openssl req -noout -modulus -in .\MyFirst.csr | openssl md5

# Check an external SSL connection
openssl s_client -connect www.google.com:443

获得原始哈希后,您可以将该原始哈希与当前哈希进行比较,以验证证书没有被修改或损坏。

以下是该代码在 PowerShell 中运行时的示例:

[玩转系统] Windows 10 上卓越的 OpenSSL (PowerShell)

概括

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

其他资源

  • OpenSSL 配置手册页
  • OpenSSL 命令
  • 在线 SSL 检查器
  • 使用 PowerShell 自动安装 IIS SSL 证书
  • 如何使用 PowerShell 创建自签名证书

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯