2015-11-04 36 views
0

我正在寻找一种方法来更新现有CA模板的有效期,您知道这是否可以使用certutil,任何其他命令或编程方式与Powershell或C#。如何以编程方式或使用命令行程序更新现有CA模板的有效期

CA在Windows Server 2008 R2上运行。

我的目标是每天更新特定模板的有效期限,以便任何要求使用该模板在特定日期过期就读,让我们说12月31日上运行脚本,2016年

谢谢,

回答

1

假设您正在运行AD CS企业CA,证书模板存储在位于Configuration NC的Active Directory中。

正如在评论CryptoGuy指出,这种做法是不支持通过Microsoft - 你真的应该只使用证书模板MMC,certtmpl.msc,这个任务

检索证书模板:

$CertTemplateParams = @{ 
    LDAPFilter = '(&(objectClass=pKICertificateTemplate))' 
    SearchBase = 'CN=Certificate Templates,CN=Public Key Services,CN=Services,{0}' -f ([adsi]'LDAP://RootDSE').configurationNamingContext[0] 
    Properties = 'pKIExpirationPeriod' 
} 
$Templates = Get-ADObject @CertTemplateParams 

过滤模板,你需要:

$UserTemplate = $Templates |Where-Object { $_.Name -eq "User" } 

pKIExpirationPeriod attribute代表64位FILETIME结构,但你可以用[BitConverter]::ToInt64()转换为时间跨度:

# File time type counts in 100-nanosecond intervals, we need seconds 
$Validity = New-TimeSpan -Seconds $([System.BitConverter]::ToInt64($UserTemplate.pKIExpirationPeriod, 0) * -.0000001) 

现在添加一些时间的时间跨度:

$Validity.Add($(New-TimeSpan -Days 365)) 

将它转换回到64位字节数组:

$NewExpirationPeriod = [System.BitConverter]::GetBytes($($Validity.TotalSeconds * -10000000)) 

使用Set-ADObject更改模板对象:

Set-ADObject -Identity $UserTemplate.objectGuid -Replace @{pKIExpirationPeriod = $NewExpirationPeriod} 
+0

前段时间,我与Windows PKI团队就类似问题进行了长时间的交谈。他们明确表示他们不支持证书模板MMC之外的任何证书模板设置(ACL除外)。有很多的依赖关系,如果你不遵循它们(你不这样做),它可能会导致不可预测的结果。即使你知道如何,微软也不会推荐这个。此外,问题中的整个设计看起来都不太好。 – Crypt32

+0

@CryptoGuy我不会使用自己的时间跨度,但另一方面想要一步一步展示它。它的工作原理虽然我已经在我的PKI实验室中进行了测试。 “证书模板MMC以外的”[nothing]“是否也意味着没有(支持的)编程接口存在,或者它是否像GPO,如果您真的需要至少有'IGroupPolicyObject'? –

+0

它会反正工作。没有冒犯,但是......你做了一件不支持的事情:修改版本1模板(用户),不允许修改。另一件事,你没有在设置修改后增加模板的次要版本。这是我与微软谈话的摘录“各种模板属性之间存在固有的相互依赖关系,这些属性通过视觉线索和模板管理单元中的复杂逻辑强制执行。” – Crypt32

0

http://www.expta.com/2010/08/how-to-create-certificates-with-longer.html

根据这一点,您可以更改CA寿命或使用的certutil最长有效期。我假设你的模板到期限制了你。也许创建一个更长的到期日期的新模板?

+0

上面的链接解释更新根CA的生命周期,而不是一个CA模板的方式。我编辑了这个问题来指定我的目标。谢谢 – m0dest0

+0

我认为你可以将模板替换为具有扩展有效性的模板,从而使未来生成的证书具有更长的有效期。 – Xalorous

+0

请记住,这是关于使用命令或以编程方式更改有效期的方法。谢谢。 – m0dest0

相关问题