如何使用PowerShell创建自签名证书
大多数熟悉PKI的Windows管理员都知道 MakeCert.exe实用程序,允许创建自签名证书。此工具包含在Microsoft.NET Framework SDK和Microsoft Windows SDK中。在Windows 8和Windows Server 2012中,可以使用PowerShell 3.0(或者更高版本)创建自签名证书,而无需任何特殊工具。
使用New-SelfSignedCertificate Cmdlet创建自签名证书
要在PowerShell中创建自签名证书,建议使用PoSh PKI(公钥基础设施)模块的一部分 New SelfSignedCertificatecmdlet:
要列出PKI模块中所有可用的cmdlet,请运行命令。
Get-Command -Module PKI
如果某些服务无法部署PKI/CA基础设施或者无法从外部提供商购买可信证书,则建议使用自签名证书进行测试或者为Intranet服务(IIS、Exchange、Web应用程序代理、LDAPS、ADRMS、DirectAccess等)提供证书。
提示。别忘了,我们可以很容易地从Let'sEncrypt获得免费的SSL证书。下面是一个示例,说明如何从“让我们加密”中颁发SSL证书并将其绑定到Windows Server 2012 R2上的IIS站点。
要创建证书,我们必须指定 –DnsName(服务器的DNS名称,该名称可以是任意的,并且不同于localhost name)和 -CertStoreLocation(将放置生成的证书的本地证书存储)的值。我们可以使用cmdlet在Windows 10(在我们的示例中)、Windows 8/8.1和Windows Server 2015/2012 R2/2012中创建自签名证书。
为DNS名称创建证书test.contoso.com网站并将其放到计算机上的个人证书列表中,运行以下命令:
New-SelfSignedCertificate -DnsName test.contoso.com -CertStoreLocation cert:\LocalMachine\My
Directory: Microsoft.PowerShell.Security\Certificate::LocalMachine\My Thumbprint Subject ---------- ------ 2779C7928D055B21AAA0Cfe2F6BE1A5C2CA83B30 CN=test.contoso.com
此命令创建证书并将其导入计算机的个人存储区。打开的 certlm.msc管理单元,确保新证书已出现在证书存储的 个人部分。
默认情况下,使用以下设置生成自签名证书:
密码算法: RSA;
密钥长度: 2048位;
可接受的密钥用法: 客户端认证和 服务器认证;
该证书可用于: 数字签名、 密钥加密;
有效期: 1年。
如我们所见,证书属性表示此证书可用于客户端身份验证,但它也适用于服务器身份验证。
说明自签发之日起,自签发之日起1年内有效。要颁发3年的证书,请运行以下命令:
$todaydt = Get-Date years = $todaydt.AddYears(3) New-SelfSignedCertificate -dnsname test.contoso.com -notafter years -CertStoreLocation cert:\LocalMachine\My
为了将生成的带有私钥的证书导出到受密码保护的PFX文件,我们需要它的指纹。它可以从New SelfSignedCertificate命令的结果复制:
$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
此公钥或者证书文件本身可以使用GPO安装在web服务器或者域客户端上(如何使用GPO在域PC上安装证书)。
New-SelfSignedCertificate cmdlet的一个有用特性是可以创建具有多个不同名称的证书 使用者备选名称(SAN)。
说明创建具有多个名称的证书时,DnsName参数中的first name将用作证书的CN(公用名)。