[玩转系统] 如何在 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
如果您无法部署 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
该命令将返回新证书的指纹、主题和增强密钥使用列表。默认情况下,此类证书可用于客户端身份验证 (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 管理单元,并确保新证书出现在计算机证书存储的个人部分中。
使用 Get-ChildItem cmdlet,您可以通过其指纹显示所创建证书的所有参数:
Get-ChildItem -Path "Cert:\LocalMachine\My" | Where-Object Thumbprint -eq 2175A76B10F843676951965F52A718F635FFA043 | Select-Object *
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)}
使用 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
此外,您还可以通过指定 *.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 上导出自签名证书?
为了将生成的带有私钥的证书导出到受密码保护的 PFX 文件,您需要指定其指纹。它可以从 New-SelfSignedCertificate 命令的结果中复制。您还需要指定证书的安全密码并将其转换为 SecureString 格式:
$CertPassword = ConvertTo-SecureString -String “YourPassword” -Force -AsPlainText
Export-PfxCertificate -Cert cert:\LocalMachine\My79C7928D055B21AAA0Cfe2F6BE1A5C2CA83B30 -FilePath C:\test.pfx -Password $CertPassword
您可以按如下方式导出证书公钥(导出时不包含私钥):
Export-Certificate -Cert Cert:\LocalMachine\My79C7928D055B21AAA0Cfe2F6BE1A5C2CA83B30 -FilePath C:\tstcert.cer
确保 *.CER (PFX) 证书文件出现在指定目录中。如果右键单击它并选择“安装证书”菜单项,则可以使用证书导入向导将证书添加到计算机上的受信任根证书中。
选择证书存储位置 -> 本地计算机,将所有证书放入以下存储 -> 受信任的根证书颁发机构。
您可以使用以下命令创建证书并立即将其导入计算机的受信任根证书存储中:
$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 证书根存储以查找不受信任和可疑的证书,并更新受信任的根证书列表)。
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 加密算法创建更流行的证书类型。
您可以将使用 PowerShell 生成的自签名 SHA-256 证书绑定到 Windows Server 上的 IIS 站点。如果您使用 PowerShell 创建 SSL 证书并将其放置在计算机的证书存储中,则 IIS 站点将自动可以使用该证书。
打开 IIS 管理器控制台 (
inetmgr.exe
),选择您的网站,然后选择您在网站绑定选项中创建的证书。保存您的更改。
您还可以通过指纹将 SSL 证书绑定到 IIS 站点:
New-IISSiteBinding -Name "Default Web Site" -BindingInformation "*:443:" -CertificateThumbPrint $yourCert.Thumbprint -CertStoreLocation "Cert:\LocalMachine\My" -Protocol https
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[短剧合集] 2025年06月2日 精选+付费短剧推荐39部
[软件合集] 25年6月2日 精选软件18个
[软件合集] 25年6月1日 精选软件15个
[短剧合集] 2025年06月1日 精选+付费短剧推荐59部
[短剧] 2025年05月31日 精选+付费短剧推荐58部
[软件合集] 25年5月31日 精选软件66个
[电影] 黄沙漫天(2025) 4K.EDRMAX.杜比全景声 / 4K杜比视界/杜比全景声
[风口福利] 短视频红利新风口!炬焰创作者平台重磅激励来袭
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[美图] 2W美女个美女小姐姐,饱眼福
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag