我正在寻找一种方法来更新现有CA模板的有效期,您知道这是否可以使用certutil,任何其他命令或编程方式与Powershell或C#。如何以编程方式或使用命令行程序更新现有CA模板的有效期
CA在Windows Server 2008 R2上运行。
我的目标是每天更新特定模板的有效期限,以便任何要求使用该模板在特定日期过期就读,让我们说12月31日上运行脚本,2016年
谢谢,
我正在寻找一种方法来更新现有CA模板的有效期,您知道这是否可以使用certutil,任何其他命令或编程方式与Powershell或C#。如何以编程方式或使用命令行程序更新现有CA模板的有效期
CA在Windows Server 2008 R2上运行。
我的目标是每天更新特定模板的有效期限,以便任何要求使用该模板在特定日期过期就读,让我们说12月31日上运行脚本,2016年
谢谢,
假设您正在运行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}
http://www.expta.com/2010/08/how-to-create-certificates-with-longer.html
根据这一点,您可以更改CA寿命或使用的certutil最长有效期。我假设你的模板到期限制了你。也许创建一个更长的到期日期的新模板?
前段时间,我与Windows PKI团队就类似问题进行了长时间的交谈。他们明确表示他们不支持证书模板MMC之外的任何证书模板设置(ACL除外)。有很多的依赖关系,如果你不遵循它们(你不这样做),它可能会导致不可预测的结果。即使你知道如何,微软也不会推荐这个。此外,问题中的整个设计看起来都不太好。 – Crypt32
@CryptoGuy我不会使用自己的时间跨度,但另一方面想要一步一步展示它。它的工作原理虽然我已经在我的PKI实验室中进行了测试。 “证书模板MMC以外的”[nothing]“是否也意味着没有(支持的)编程接口存在,或者它是否像GPO,如果您真的需要至少有'IGroupPolicyObject'? –
它会反正工作。没有冒犯,但是......你做了一件不支持的事情:修改版本1模板(用户),不允许修改。另一件事,你没有在设置修改后增加模板的次要版本。这是我与微软谈话的摘录“各种模板属性之间存在固有的相互依赖关系,这些属性通过视觉线索和模板管理单元中的复杂逻辑强制执行。” – Crypt32