目录:
该模块不受官方支持。它被创建为一个方便的模块,用于生成自签名证书,以简化 HTTPS 功能的测试。
该模块不应该在任何生产场景中使用;它旨在创建仅用于测试目的的自签名证书。
该模块旨在以一种方便的跨平台方式在 PowerShell Core 和 Windows PowerShell 5.1 中生成自签名证书。
由于 .NET Core 已经嵌入了自己的跨平台加密/证书 API,因此该模块是本机 PowerShell 脚本模块,没有二进制依赖项。
该模块的一些目标包括:
X509HighlySpecificCryptoObject
分配和操作您可能想看看其他一些用于生成自签名证书的替代方案,如下所列:
PkiClient 模块中的 Windows PowerShell 的New-SelfSignedCertificate
cmdlet。
可以使用 WindowsCompatibility 模块从 Windows 上的 PowerShell Core 使用它,如下所示:
Install-Module WindowsCompatibility
Import-WinModule PKI
New-SelfSignedCertificate # args as needed
不过,该模块仅适用于 Windows,没有 Linux 版本。
dotnet dotnet-dev-certs
全局工具,旨在为 ASP.NET Core 开发生成自签名证书。
可以从 dotnet CLI 安装。
openssl
,它确实可以跨平台工作,但与 PowerShell 本机选项相比可能不太有利,并且使用 PEM 而不是 PFX 格式。
要创建一个简单的证书,可以执行以下操作:
> New-SelfSignedCertificate
Certificate written to C:UsersroholtDocumentsDevsandboxcertificate.pfx
Thumbprint Subject EnhancedKeyUsageList
---------- ------- --------------------
A51B016324B5D2F11340CDCC52004B8129C88D3B CN = localhost
这将在您的 CWD 中为localhost
创建一个名为certificate.pfx
的新证书。该命令本身返回一个X509Certificate2
对象,描述写入磁盘的证书。您可以检查该对象以查找其属性。该证书将没有密钥用法、没有基本约束、没有增强的密钥用法和主题标识符密钥扩展。
注意:要重复此命令,您将需要-Force
参数才能覆盖之前生成的旧证书。
New-SelfSignedCertificate
命令允许指定完整的专有名称以及一些其他选项:
> $password = ConvertTo-SecureString - Force - AsPlainText ' your password '
> $distinguishedName = @ {
CommonName = ' example.org '
Country = ' US '
StateOrProvince = ' Nebraska '
Locality = ' Omaha '
Organization = ' Umbrella Corporation '
OrganizationalUnit = ' Sales '
EmailAddress = ' [email protected] '
}
> $certificateParameters = $distinguishedName + @ {
OutCertPath = ' C:UsersyouDocumentscert.pfx '
StartDate = [ System.DateTimeOffset ]::Now
Duration = [ timespan ]::FromDays( 365 )
Passphrase = $password
CertificateFormat = ' Pfx ' # Values from [System.Security.Cryptography.X509Certificates.X509ContentType]
KeyLength = 4096
ForCertificateAuthority = $true
KeyUsage = ' DigitalSignature ' , ' KeyEncipherment ' # Values from [System.Security.Cryptography.X509Certificates.X509KeyUsageFlags]
EnhancedKeyUsage = ' ServerAuthentication ' , ' ClientAuthentication '
}
> New-SelfSignedCertificate @certificateParameters - Force
WARNING: Parameter ' EmailAddress ' is obsolete. The email name component is deprecated by the PKIX standard
Certificate written to C:UsersroholtDocumentsDevsandboxhere.pfx
Thumbprint Subject EnhancedKeyUsageList
---------- ------- --------------------
7445433CB2BB4948E12794A167C6725DC214AA84 CN = example.org , O.. . {Server Authentication , Client Authentication}
上述命令生成的证书将具有以下属性:
发行者和主体专有名称设置为:
CN=example.org, OU=Sales, O=Umbrella Corporation, L=Omaha, S=Nebraska, C=US, [email protected]
密码保护(在本例中使用密码'Your password'
)。
自创建时间起一年有效期(截断毫秒)。
4096 位 RSA 密钥。
基本约束扩展, CertificateAuthority
设置为true
。
指示了Digital Signature
和Key Encipherment
基本密钥用法。
指示了Server Authentication
和Client Authentication
增强的密钥用法。
该命令还提供-AdditionalExtension
参数,该参数采用System.Security.Cryptography.X509Certificates.X509Extension
数组来添加到任何生成的证书中。
该模块尚不支持在 Linux 世界中大量使用的 PEM 文件。虽然本身不是证书格式,但它们是证书的常见编码,我们应该努力以某种方式支持它们。
目前,作者不知道 PowerShell Core 或 .NET Core 本身是否支持 PEM。
该模块生成的证书扩展目前都将Critical
字段设置为false
以提供更大的灵活性。
然而,可能需要将其中任何或全部配置为指定为Critical
。理想情况下,这可以在不扰乱已经有大量参数的命令的情况下完成。
目前, ServerAuthentication
和ClientAuthentication
支持增强的密钥用法(以约束方式,以便于使用)。
理想情况下,可以为此提供更多选择。
该模块可以提供一组生成描述常用证书扩展的X509Extension
的类。
该模块已获得 MIT 许可。请参阅 LICENSE.txt。