Windows 10上的OpenSSL:全面的PowerShell指南

生成SSL证书可能是一项艰巨的任务,充满了挫折和悲伤。但事实并非如此!如果你使用Windows 10并且拥有OpenSSL,再加上这篇教程的一点帮助,你就能轻松搞定。

在本文中,你将学习如何在Windows 10上安装OpenSSL。安装完成后,你将能够生成SSL证书,调试和排除证书问题,并在不同格式之间进行转换。

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

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

先决条件

在本文中,你将通过动手实践来学习。虽然OpenSSL一直是Linux操作系统的实用工具,但你也可以在Windows操作系统上使用它。

本指南中的所有截图均来自Windows 10版本1909和PowerShell 7。

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

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

Installing OpenSSL.Light using Chocolatey package manager in 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文件,应该看到类似下面的内容。

Sample OpenSSL configuration file

下载的配置现在将原样工作。在生产环境中不要使用默认值!

更新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

# 将环境变量添加到PowerShell配置文件
# 检查配置文件,如果不存在则创建一个!
if (-not (Test-Path $profile) ) {
    New-Item -Path $profile -ItemType File -Force
}

# 编辑配置文件以添加这些行
'$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二进制文件,如下所示。

Verifying OpenSSL version in PowerShell

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

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

相关:您的指南:X509 证书入门

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

openssl req -new -out MyFirst.csr
Generating a CSR and Private Key using OpenSSL in PowerShell

完成后,您将获得一个有效的 CSR 和私钥,可用于为您颁发 SSL 证书。

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

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

生成 RSA 密钥对

您还可以使用 OpenSSL 创建 RSA 密钥对(公钥/私钥)。要这样做,首先使用下面所示的 genrsa 子命令创建一个私钥。

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

# 使用最大密钥尺寸 2048 生成私钥
# 密钥尺寸可以是 512、758、1024、1536 或 2048。
openssl genrsa -out rsa.private 2048

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

# 使用私钥生成公钥
openssl rsa -in rsa.private -out rsa.public -pubout -outform PEM

生成自签名证书

偶尔您可能需要生成一个 自签名证书。自签名证书可以在实验中使用,但在生产环境中使用不是一种安全的做法。

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

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
Checking a CSR with OpenSSL in PowerShell

在本指南开头创建 CSR 时输入的详细信息,如国家名称、组织名称和电子邮件地址,应完全匹配。

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

openssl x509 -in .\certificate.crt -text -noout | more
Checking a certificate with OpenSSL with the x509 command in PowerShell

使用 OpenSSL 转换证书

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

为了演示如何转换证书,让我们将之前创建的自签名证书(以 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:

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

# 公钥/私钥
openssl rsa -noout -modulus -in .\privateKey.key | openssl md5

# 证书签发请求
openssl req -noout -modulus -in .\MyFirst.csr | openssl md5

# 检查外部SSL连接
openssl s_client -connect www.google.com:443

一旦您获得了原始哈希值,您就可以将其与当前哈希值进行比较,以验证证书是否已被修改或损坏。

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

Sample troubleshooting command output with OpenSSL in PowerShell

摘要

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

附加资源

Source:
https://adamtheautomator.com/openssl-windows-10/