首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新的-在Win2012 r2上的自签名证书具有较少的参数

新的-在Win2012 r2上的自签名证书具有较少的参数
EN

Stack Overflow用户
提问于 2016-03-10 18:06:51
回答 2查看 29.6K关注 0票数 12

我正在尝试创建一个具有特定加密参数值的自签名证书。

在Win Server 2012 r2标准上运行PowerShell 5.0,当我尝试使用

代码语言:javascript
复制
New-SelfSignedCertificate

我收到一个错误:

New-SelfSignd证书:找不到匹配参数名称“Subject”的参数。

当我尝试使用-Subject参数时,除了我的笔记本电脑上允许的其他参数外,它不会出现在intellisense中。

然而,在我的笔记本电脑(Win 10和PowerShell 5.0)上,我可以使用这些参数,并使用以下代码创建一个自签名证书

代码语言:javascript
复制
#create a Certificate
# OID for document encryption
    $Oid = New-Object System.Security.Cryptography.Oid "1.3.6.1.4.1.311.80.1"
    $oidCollection = New-Object System.Security.Cryptography.OidCollection
    $oidCollection.Add($oid) > $Null
# Create enhanced key usage extension that allows document encryption
$Ext = New-Object System.Security.Cryptography.X509Certificates.X509EnhancedKeyUsageExtension $oidCollection, $true 

$myCert = New-SelfSignedCertificate -Subject 'CN=myservernameasubject' -CertStoreLocation "Cert:\LocalMachine\My" -KeySpec KeyExchange -KeyUsage KeyEncipherment, DataEncipherment -Extension $Ext
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-10 18:35:55

使用-DnsName代替不使用CN=

来自PowerShell帮助:

-DnsName <String>指定一个或多个DNS名称,当要复制的证书未通过CloneCert参数指定时,将其放入证书的主题可选名称扩展中。第一个DNS名称也被保存为主题名和发布者名称.

遗憾的是,Windows 2012 -KeySpec和Windows8.1中的新-自签署证书不支持新-自签署证书和其他相关选项。否则,您将看到三个选项中的一个来生成所需的证书;将答案中基于COM对象的代码改编为如何使用C#创建自签名证书?,以便在PowerShell中使用,使用外部可执行文件(如makecert.exe ),或在其他地方生成证书/密钥对,然后将其导入另一台计算机上的证书存储区。

更新:经过进一步的研究,似乎在PowerShell中采用基于COM的代码是一个不错的选择。我发现了Vishal,使用powershell和CertEnroll接口生成证书(自签名)的一篇博客文章,给出了以下PowerShell代码:

代码语言:javascript
复制
$name = new-object -com "X509Enrollment.CX500DistinguishedName.1"
$name.Encode("CN=TestServer", 0)

$key = new-object -com "X509Enrollment.CX509PrivateKey.1"
$key.ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
$key.KeySpec = 1
$key.Length = 1024
$key.SecurityDescriptor = "D:PAI(A;;0xd01f01ff;;;SY)(A;;0xd01f01ff;;;BA)(A;;0x80120089;;;NS)"
$key.MachineContext = 1
$key.Create()

$serverauthoid = new-object -com "X509Enrollment.CObjectId.1"
$serverauthoid.InitializeFromValue("1.3.6.1.5.5.7.3.1")
$ekuoids = new-object -com "X509Enrollment.CObjectIds.1"
$ekuoids.add($serverauthoid)
$ekuext = new-object -com "X509Enrollment.CX509ExtensionEnhancedKeyUsage.1"
$ekuext.InitializeEncode($ekuoids)

$cert = new-object -com "X509Enrollment.CX509CertificateRequestCertificate.1"
$cert.InitializeFromPrivateKey(2, $key, "")
$cert.Subject = $name
$cert.Issuer = $cert.Subject
$cert.NotBefore = get-date
$cert.NotAfter = $cert.NotBefore.AddDays(90)
$cert.X509Extensions.Add($ekuext)
$cert.Encode()

$enrollment = new-object -com "X509Enrollment.CX509Enrollment.1"
$enrollment.InitializeFromRequest($cert)
$certdata = $enrollment.CreateRequest(0)
$enrollment.InstallResponse(2, $certdata, 0, "")
票数 17
EN

Stack Overflow用户

发布于 2017-11-22 17:12:37

下面这个自我签名的选项很好.

代码语言:javascript
复制
New-SelfSignedCertificate -DnsName "*.costoso100.com" -CertStoreLocation "cert:\LocalMachine\My"

我能够在大约15分钟内导出和安装LDAPS。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35924054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档