gpt4 book ai didi

c# - 如何以编程方式或使用命令行程序更新现有 CA 模板的有效期

转载 作者:太空宇宙 更新时间:2023-11-03 13:16:38 24 4
gpt4 key购买 nike

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

CA 在 Windows Server 2008 R2 上运行。

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

谢谢,

最佳答案

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

(正如 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 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}

关于c# - 如何以编程方式或使用命令行程序更新现有 CA 模板的有效期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33532260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com