1

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

CA 在 Windows Server 2008 R2 上运行。

我的目标是每天运行一个脚本来更新特定模板的有效期,以便使用该模板注册的任何请求都会在特定日期到期,比如 2016 年 12 月 31 日。

谢谢,

4

3 回答 3

2

假设您正在运行 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}
于 2015-11-05T01:24:01.167 回答
0

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

据此,您可以使用 certutil 更改 CA Lifetime 或最大有效期。我假设您的模板到期限制了您。也许创建一个有效期更长的新模板?

于 2015-11-04T22:41:00.263 回答
0

计算

$NewExpirationPeriod = [System.BitConverter]::GetBytes($([Int64]$Validity.TotalSeconds * -10000000))
于 2020-04-21T12:20:48.827 回答