如何通过程序或使用命令行程序更新现有CA模板的有效期



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

CA正在Windows Server 2008 R2上运行。

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

谢谢,

假设您运行的是AD CS Enterprise CA,证书模板存储在Active Directory中,位于Configuration 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生存期或最大有效期。我认为您的模板过期限制了您。也许可以创建一个过期日期更长的新模板?

计算

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

相关内容

  • 没有找到相关文章

最新更新