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

[玩转系统] 如何在 Windows 上创建自签名证书

作者:精品下载站 日期:2024-12-14 23:36:02 浏览:15 分类:玩电脑

如何在 Windows 上创建自签名证书


大多数熟悉 PKI 的 Windows 管理员都知道

MakeCert.exe

工具,它允许创建自签名证书。该工具是 Microsoft .NET Framework SDK 和 Microsoft Windows SDK 的一部分。在现代 Windows 版本(Windows 11/10/8.1 和 Windows Server 2022/2019/2016/2012R2)上,您可以使用内置 PowerShell cmdlet 创建自签名证书

New-SelfSignedCertificate

无需使用额外的工具。

New-SelfSignedCertificate:使用 PowerShell 创建自签名证书

要使用 PowerShell 创建自签名证书,您可以使用内置的 New-SelfSignedCertificate cmdlet,它是 PowerShell PKI(公钥基础设施)模块的一部分:

要列出 PKI 模块中所有可用的 cmdlet,请运行以下命令:

Get-Command -Module PKI

[玩转系统] 如何在 Windows 上创建自签名证书

如果您无法部署 PKI/CA 基础设施或从外部提供商处购买受信任的证书,建议使用自签名证书进行测试/开发任务或为内部 Intranet 服务(IIS、Exchange、Web 应用程序代理、LDAPS、ADRMS、DirectAccess 等)提供证书。

提示。不要忘记,您可以轻松地从 Let’s Encrypt 获得免费的 SSL 证书。以下是如何颁发 Let’s Encrypt SSL 证书并将其绑定到 Windows Server 上的 IIS 站点的示例。

要创建证书,您必须指定-DnsName(服务器名称,该名称可以是任意的,甚至与当前主机名不同)和-CertStoreLocation(将放置生成的证书的本地证书存储)的值。

若要为 DNS 名称 test.contoso.com(使用 FQDN 名称)创建新的 SSL 证书(使用默认 SSLServerAuthentication 类型)并将其放置到计算机上的个人证书中,请运行以下命令:

New-SelfSignedCertificate -DnsName test.contoso.com -CertStoreLocation cert:\LocalMachine\My

[玩转系统] 如何在 Windows 上创建自签名证书

该命令将返回新证书的指纹、主题和增强密钥使用列表。默认情况下,此类证书可用于客户端身份验证 (1.3.6.1.5.5.7.3.2) 或服务器身份验证 (1.3.6.1.5.5.7.3.1)。

如果您在非提升的 PowerShell 提示符下运行此命令(没有本地管理员权限),则会出现错误:

New-SelfSignedCertificate : CertEnroll::CX509Enrollment::_CreateRequest: Access denied. 0x80090010 (-2146893808 NTE_PERM)

如果您指定了非标准加密提供程序 (CSP)(例如,使用

-KeyAlgorithm "ECDSA_secP256r1" -Provider "Microsoft Smart Card Key Storage Provider"

参数),确保它已安装在您的计算机上(默认为 Microsoft 增强型加密提供程序)。否则会出现错误:

New-SelfSignedCertificate: CertEnroll::CX509Enrollment::_CreateRequest: Provider type not defined. 0x80090017 (-2146893801 NTE_PROV_TYPE_NOT_DEF).

默认情况下,使用以下设置生成自签名证书:

  • 加密算法:RSA

  • 密钥长度:2048位

  • 可接受的密钥用法:客户端身份验证服务器身份验证

  • 该证书可用于:数字签名密钥加密

  • 证书有效期:1年

  • 加密提供商:Microsoft 软件密钥存储提供商。

此命令创建一个新证书并将其导入计算机的个人证书存储中。打开 certlm.msc MMC 管理单元,并确保新证书出现在计算机证书存储的个人部分中。

[玩转系统] 如何在 Windows 上创建自签名证书

使用 Get-ChildItem cmdlet,您可以通过其指纹显示所创建证书的所有参数:

Get-ChildItem -Path "Cert:\LocalMachine\My" | Where-Object Thumbprint -eq 2175A76B10F843676951965F52A718F635FFA043 | Select-Object *

[玩转系统] 如何在 Windows 上创建自签名证书

PSPath                   : Microsoft.PowerShell.Security\Certificate::LocalMachine\My75A76B10F843676951965F52A718F635FFA043
PSParentPath             : Microsoft.PowerShell.Security\Certificate::LocalMachine\My
PSChildName              : 2175A76B10F843676951965F52A718F635FFA043
PSDrive                  : Cert
PSProvider               : Microsoft.PowerShell.Security\Certificate
PSIsContainer            : False
EnhancedKeyUsageList     : {Client Authentication (1.3.6.1.5.5.7.3.2), Server Authentication (1.3.6.1.5.5.7.3.1)}
DnsNameList              : {test.contoso.com}
SendAsTrustedIssuer      : False
EnrollmentPolicyEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
EnrollmentServerEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
PolicyId                 :
Archived                 : False
Extensions               : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid,
System.Security.Cryptography.Oid, System.Security.Cryptography.Oid}
FriendlyName             :
IssuerName               : System.Security.Cryptography.X509Certificates.X500DistinguishedName
NotAfter                 : 12/4/2023 5:35:15 PM
NotBefore                : 12/4/2022 5:15:15 PM
HasPrivateKey            : True
PrivateKey               :
PublicKey                : System.Security.Cryptography.X509Certificates.PublicKey
RawData                  : {48, 130, 3, 45...}
SerialNumber             : 6797F5E3F870478D4D3798BEB291DBF3
SubjectName              : System.Security.Cryptography.X509Certificates.X500DistinguishedName
SignatureAlgorithm       : System.Security.Cryptography.Oid
Thumbprint               : 2175A76B10F843676951965F52A718F635FFA043
Version                  : 3
Handle                   : 2834444631568
Issuer                   : CN=test.contoso.com
Subject                  : CN=test.contoso.com

注意。此自签名证书将在创建后 1 年后过期。您可以使用-NotAfter选项设置不同的证书有效期。例如,您可以使用以下命令颁发有效期为三年的SSL/TLS证书:

$todaydt = Get-Date
$3years = $todaydt.AddYears(3)
New-SelfSignedCertificate -dnsname test.contoso.com -notafter $3years -CertStoreLocation cert:\LocalMachine\My

您可以创建证书链。首先,创建根证书 (CA)。然后根据它生成SSL服务器证书:

$rootCert = New-SelfSignedCertificate -Subject 'CN=TestRootCA,O=TestRootCA,OU=TestRootCA' -KeyExportPolicy Exportable  -KeyUsage CertSign,CRLSign,DigitalSignature -KeyLength 2048 -KeyUsageProperty All -KeyAlgorithm 'RSA'  -HashAlgorithm 'SHA256'  -Provider 'Microsoft Enhanced RSA and AES Cryptographic Provider'
New-SelfSignedCertificate -CertStoreLocation cert:\LocalMachine\My -DnsName "test2.contoso.com" -Signer $rootCert -KeyUsage KeyEncipherment,DigitalSignature

要更改证书密钥长度和加密算法,您需要使用

-KeyAlgorithm

,

-KeyLength

, 和

-HashAlgorithm

选项。例如:

New-SelfSignedCertificate -KeyAlgorithm RSA -KeyLength 2048 -HashAlgorithm "SHA256" …

Microsoft Platform Crypto Provider 允许您使用设备的可信平台模块芯片 (TPM 2.0) 来保护密钥。

New-SelfSignedCertificate -Type Custom -Provider "Microsoft Platform Crypto Provider" ...

您可以生成文档加密证书来保护您的文档和电子邮件。使用

DocumentEncryptionCert

创建证书时输入:

$Params = @{
"DnsName" = "myhostname"
"CertStoreLocation" = "Cert:\CurrentUser\My"
"KeyUsage" = "KeyEncipherment","DataEncipherment","KeyAgreement"
"Type" = "DocumentEncryptionCert"
}
$doccert=New-SelfSignedCertificate @Params

检查证书EnhancedKeyUsageList值:

$doccert|select EnhancedKeyUsageList
{Document Encryption (1.3.6.1.4.1.311.80.1)}

[玩转系统] 如何在 Windows 上创建自签名证书

使用 PowerShell 创建具有使用者备用名称 (SAN) 的证书

New-SelfSignedCertificate cmdlet 允许您创建具有多个不同主题备用名称(SAN)的证书。

注意。这

Makecert.exe

与 New-SelfSignedCertificate cmdlet 不同,该工具无法创建 SAN 和通配符证书。

如果要创建具有多个名称的证书,则 DnsName 参数的第一个名称将用作证书的 CN(通用名称)。例如,让我们创建一个具有以下名称的自签名 SAN 证书:

  • 主题名称(中文):

    adfs1.contoso.com
  • 主题备用名称 (DNS):

    web_gw.contoso.com
  • 主题备用名称 (DNS):

    enterprise_reg.contoso.com

您可以使用以下命令生成具有不同通用名称(甚至多个域)的证书:

New-SelfSignedCertificate -DnsName adfs1.contoso.com,web_gw.contoso.com,enterprise_reg.contoso.com -CertStoreLocation cert:\LocalMachine\My

[玩转系统] 如何在 Windows 上创建自签名证书

此外,您还可以通过指定 *.contoso.com 作为服务器名称来为整个域命名空间生成通配符证书。

New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname *.contoso.com

您不仅可以为 DNS 主机名生成自签名证书,还可以为 IP 地址生成自签名证书。为此,您需要使用

-TextExtension

而不是 -DnsName 参数。例如:

New-SelfSignedCertificate -TextExtension @("2.5.29.17={text}IPAddress=10.1.2.3&DNS=TESTServer1&DNS=TESTServer1.local")

正如您所看到的,主题备用名称字段现在包含主机的 IP 地址及其 DNS 名称。

[玩转系统] 如何在 Windows 上创建自签名证书

如何在 Windows 上导出自签名证书?

为了将生成的带有私钥的证书导出到受密码保护的 PFX 文件,您需要指定其指纹。它可以从 New-SelfSignedCertificate 命令的结果中复制。您还需要指定证书的安全密码并将其转换为 SecureString 格式:

$CertPassword = ConvertTo-SecureString -String “YourPassword” -Force -AsPlainText
Export-PfxCertificate -Cert cert:\LocalMachine\My79C7928D055B21AAA0Cfe2F6BE1A5C2CA83B30 -FilePath C:\test.pfx -Password $CertPassword

[玩转系统] 如何在 Windows 上创建自签名证书

您可以按如下方式导出证书公钥(导出时不包含私钥):

Export-Certificate -Cert Cert:\LocalMachine\My79C7928D055B21AAA0Cfe2F6BE1A5C2CA83B30 -FilePath C:\tstcert.cer

确保 *.CER (PFX) 证书文件出现在指定目录中。如果右键单击它并选择“安装证书”菜单项,则可以使用证书导入向导将证书添加到计算机上的受信任根证书中。

[玩转系统] 如何在 Windows 上创建自签名证书

选择证书存储位置 -> 本地计算机,将所有证书放入以下存储 -> 受信任的根证书颁发机构

[玩转系统] 如何在 Windows 上创建自签名证书

您可以使用以下命令创建证书并立即将其导入计算机的受信任根证书存储中:

$SelfSignCert=New-SelfSignedCertificate …..
$certFile = Export-Certificate -Cert $SelfSignCert -FilePath C:\ps\export-certname.cer
Import-Certificate -CertStoreLocation Cert:\LocalMachine\AuthRoot -FilePath $certFile.FullName

您可以使用 GPO 在 Active Directory 域中的所有用户计算机和服务器上部署此公钥或证书文件本身(如何使用 GPO 向用户部署证书?)。

生成用于 Windows 上代码签名的自签名证书

在 PowerShell 3.0 中,New-SelfSifgnedCertificate cmdlet 仅生成 SSL 证书,不能用于对驱动程序代码、应用程序或脚本进行签名(与 MakeCert 实用程序生成的证书不同)。

您可以使用 New-SelfSifgnedCertificate cmdlet 在 PowerShell 5.0 版及更高版本中颁发代码签名证书。

您可以根据指南更新您的PowerShell版本。

要为签名应用程序代码创建自签名证书,请运行以下命令:

$cert = New-SelfSignedCertificate -Subject "My Code Signing Certificate” -Type CodeSigningCert -CertStoreLocation cert:\LocalMachine\My

现在您可以使用自签名证书对 PowerShell 脚本文件进行签名:

Set-AuthenticodeSignature -FilePath C:\PS\my_posh_script.ps1 -Certificate $cert

如果您在执行命令时收到UnknownError警告,则意味着该证书不受信任,因为它位于用户的个人证书存储中。

[玩转系统] 如何在 Windows 上创建自签名证书

您需要将其移至受信任的根证书存储(不要忘记定期扫描 Windows 证书根存储以查找不受信任和可疑的证书,并更新受信任的根证书列表)。

Move-Item -Path $cert.PSPath -Destination "Cert:\CurrentUser\Root"

现在,您可以使用此自签名证书来签署您的 PowerShell 脚本、驱动程序或应用程序。

在 Windows Server 上的 IIS 中创建 SHA-256 自签名 SSL 证书

请注意,通过 Internet Information Manager 控制台(使用创建自签名证书操作菜单项)为 IIS 创建自签名证书时,将使用 SHA-1 加密算法创建 SSL 证书。许多浏览器认为此类证书不受信任,无法用于建立安全连接(或者您可能会看到其他 SSL 警告和错误)。 New-SelfSignedCertificate cmdlet 允许您使用 SHA-256 加密算法创建更流行的证书类型。

[玩转系统] 如何在 Windows 上创建自签名证书

您可以将使用 PowerShell 生成的自签名 SHA-256 证书绑定到 Windows Server 上的 IIS 站点。如果您使用 PowerShell 创建 SSL 证书并将其放置在计算机的证书存储中,则 IIS 站点将自动可以使用该证书。

[玩转系统] 如何在 Windows 上创建自签名证书

打开 IIS 管理器控制台 (

inetmgr.exe

),选择您的网站,然后选择您在网站绑定选项中创建的证书。保存您的更改。

您还可以通过指纹将 SSL 证书绑定到 IIS 站点:

New-IISSiteBinding -Name "Default Web Site" -BindingInformation "*:443:" -CertificateThumbPrint $yourCert.Thumbprint -CertStoreLocation "Cert:\LocalMachine\My" -Protocol https

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

取消回复欢迎 发表评论:

关灯