PowerShell:在 Windows 中创建并导出自签名证书

December 17, 2023
测试
测试
测试
测试
5 分钟阅读

在今天的数字化世界中,确保数据的安全性和完整性尤为重要。证书提供了一种验证数据来源并保护数据免受篡改的方法。本文将介绍如何在 Windows 环境中使用 PowerShell 创建并导出自签名证书。

证书和公钥基础设施

在我们开始之前,让我们首先了解一下证书和公钥基础设施(PKI)。

证书是一种包含公钥和一些识别信息的文件。在PKI中,证书是由可信任的第三方(称为证书颁发机构,CA)颁发的,CA证明了证书持有者的身份以及与之关联的公钥。然而,我们也可以创建自签名证书,即由证书持有者自己(而不是CA)签名的证书。

自签名证书在许多场景中都很有用,尤其是在测试和开发环境中。然而,因为它们不是由可信的CA签名的,所以在公共互联网上使用自签名证书可能会引起信任问题。

创建自签名证书

在 Windows 中,我们可以使用 PowerShell 的 New-SelfSignedCertificate cmdlet 来创建自签名证书。以下是一个创建自签名证书的例子:

$param = @{
    "DnsName" = "mylab.wang.io"; 
    "CertStoreLocation" = "Cert:\CurrentUser\My"; 
    "NotAfter" = (Get-Date).AddYears(10);
    "KeySpec" = "KeyExchange";
    "KeyExportPolicy" = "Exportable";
}
New-SelfSignedCertificate @param

这段代码创建了一个新的自签名证书,并将其存储在当前用户的 "My" 证书存储中。

  • 证书的主题名称(也就是 DNS 名称)设置为 "mylab.wang.io"。
  • 证书的有效期是从当前日期开始的 10 年。
  • "KeySpec" 参数设置为 "KeyExchange",表示这个证书可以用于密钥交换。
  • "KeyExportPolicy" 参数设置为 "Exportable",表示证书的私钥是可导出的。

导出自签名证书

一旦创建了证书,我们可能希望将其导出为文件,以便在其他设备或应用中使用。在 PowerShell 中,我们可以使用 Export-PfxCertificateExport-Certificate cmdlets 来导出证书。

Export-PfxCertificate cmdlet 导出证书和其私钥为 PFX 文件(也称为 PKCS#12 文件)。这种文件类型包含证书的全部信息,包括私钥,因此需要保护好。以下是一个导出 PFX 文件的例子:

$pwd = ConvertTo-SecureString -String "Admin_123456" -Force -AsPlainText
Get-ChildItem -Path 'Cert:\CurrentUser\My' | Where-Object { $_.Subject -match "mylab.wang.io" } | Export-PfxCertificate -FilePath C:\Users\Administrator\Desktop\cert\mylab.wang.io.pfx -Password $pwd

这段代码从 "My" 证书存储中找出主题名称包含 "mylab.wang.io" 的证

书,并将其导出为 PFX 文件。导出的文件被加密,并使用密码 "Admin_123456"。

Export-Certificate cmdlet 则导出证书为 CER 文件(也称为 X.509 证书)。这种文件类型只包含证书的公钥部分,不包含私钥,因此可以在需要的地方公开分享。以下是一个导出 CER 文件的例子:

Get-ChildItem -Path Cert:\CurrentUser\My\ | Where-Object { $_.Subject -match "mylab.wang.io" } | Export-Certificate -FilePath C:\Users\Administrator\Desktop\cert\mylab.wang.io.cer

完整脚本:

$param = @{
    "DnsName" = "mylab.wang.io"; 
    "CertStoreLocation" = "Cert:\CurrentUser\My"; 
    "NotAfter" = (Get-Date).AddYears(10);
    "KeySpec" = "KeyExchange";
    "KeyExportPolicy" = "Exportable";
}
New-SelfSignedCertificate @param
$pwd = ConvertTo-SecureString -String "Admin_123456" -Force -AsPlainText

Get-ChildItem -Path 'Cert:\CurrentUser\My' | Where-Object { $_.Subject -match "mylab.wang.io" } | Export-PfxCertificate -FilePath C:\Users\Administrator\Desktop\cert\mylab.wang.io.pfx -Password $pwd
Get-ChildItem -Path Cert:\CurrentUser\My\ | Where-Object { $_.Subject -match "mylab.wang.io" } | Export-Certificate -FilePath C:\Users\Administrator\Desktop\cert\mylab.wang.io.cer

总结

证书是保护网络通信和数据的重要工具。在 Windows 中,我们可以使用 PowerShell 来创建和导出自签名证书。虽然自签名证书在公共互联网上可能会引发信任问题,但它们在测试和开发环境中是非常有用的工具。如果需要一个可在公共互联网上被广泛接受的证书,应该考虑从一个公认的证书颁发机构获取证书。

希望你发现本文有用,并学到了一些新的 PowerShell 技巧!如果你有任何问题或需要更深入的解释,欢迎在评论区留言

继续阅读

更多来自我们博客的帖子

如何安装 BuddyPress
由 测试 December 17, 2023
经过差不多一年的开发,BuddyPress 这个基于 WordPress Mu 的 SNS 插件正式版终于发布了。BuddyPress...
阅读更多
Filter如何工作
由 测试 December 17, 2023
在 web.xml...
阅读更多
如何理解CGAffineTransform
由 测试 December 17, 2023
CGAffineTransform A structure for holding an affine transformation matrix. ...
阅读更多