我正在寻找一种方法来更新现有 CA 模板的有效期,您知道这是否可以使用 certutil、任何其他命令或使用 Powershell 或 C# 以编程方式进行。
CA 在 Windows Server 2008 R2 上运行。
我的目标是每天运行一个脚本来更新特定模板的有效期,以便使用该模板注册的任何请求都会在特定日期到期,比如 2016 年 12 月 31 日。
谢谢,
我正在寻找一种方法来更新现有 CA 模板的有效期,您知道这是否可以使用 certutil、任何其他命令或使用 Powershell 或 C# 以编程方式进行。
CA 在 Windows Server 2008 R2 上运行。
我的目标是每天运行一个脚本来更新特定模板的有效期,以便使用该模板注册的任何请求都会在特定日期到期,比如 2016 年 12 月 31 日。
谢谢,
假设您正在运行 AD CS 企业 CA,证书模板存储在 Active Directory 中,位于配置 NC 中。
(正如CryptoGuy在评论中指出的那样,微软不支持这种方法- 你真的应该只使用证书模板 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属性表示 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
据此,您可以使用 certutil 更改 CA Lifetime 或最大有效期。我假设您的模板到期限制了您。也许创建一个有效期更长的新模板?
计算
$NewExpirationPeriod = [System.BitConverter]::GetBytes($([Int64]$Validity.TotalSeconds * -10000000))