ICertServerPolicy::SetCertificateProperty 方法 (certif.h)
使用 SetCertificateProperty 方法设置与证书关联的属性。
语法
HRESULT SetCertificateProperty(
[in] const BSTR strPropertyName,
[in] LONG PropertyType,
[in] const VARIANT *pvarPropertyValue
);
参数
[in] strPropertyName
指定要设置的属性。 可以设置与证书关联的任何 名称属性 。
此外,还可以设置以下证书属性。
值 | 含义 |
---|---|
|
证书在给定日期之前无效。 |
|
证书在给定日期之后无效。 |
|
将此属性设置为 0x00000400 以防止请求保留在 CA 数据库中。
谨慎 设置此属性时,请勿覆盖 GetCertificateProperty 返回的任何掩码值。 通过使用现有值执行按位 OR 来设置值。
|
|
一个布尔值,指定 CA 是否应运行跨林注册模式。
Windows Server 2008 和 Windows Server 2003: 不支持跨林注册。 从 Windows Server 2008 R2 开始支持跨林注册。 |
|
告知 CA 将请求者帐户名称 (“RequesterName”) 和可分辨名称。 |
|
告知 CA 将请求者 的用户主体名称 (UPN) 转换为请求者名称 (“RequesterName”) 并设置请求者名称和请求者可分辨名称。 |
|
告知 CA 将请求者的 FQDN 1779 名称转换为请求者名称,并将请求者名称 (“RequesterName”) 和请求者可分辨名称。 |
[in] PropertyType
指定要设置的属性的类型。 Type 参数必须与 VARIANT 结构的 vt 字段中设置的 pvarValue 数据类型一致。 Type 参数可以设置为以下类型之一。
值 | 含义 |
---|---|
|
有符号的长数据。 |
|
日期/时间数据。 |
|
二进制数据。 |
|
Unicode 字符串数据 |
[in] pvarPropertyValue
指定要将属性设置为的值。
返回值
VB
如果该方法成功,该方法将返回S_OK。如果方法失败,它将返回指示错误的 HRESULT 值。 有关常见错误代码的列表,请参阅 常见 HRESULT 值。
注解
在使用此方法之前,必须调用 ICertServerPolicy::SetContext 。
NotBefore 和 NotAfter 证书属性约束证书有效的生存期。 这些属性的数据类型是派生自自动化中的 COleDateTime 的浮点 VARIANT 日期。
使用 SetCertificateProperty 设置 NotBefore 和 NotAfter 证书属性时,以下限制适用:
- NotBefore 日期不能设置为早于 证书颁发机构 (CA) 证书的 NotBefore 日期的日期。
- NotAfter 日期不能设置为晚于 CA 证书的 NotAfter 日期的日期。
- NotBefore 日期不能设置为早于已设置的日期,即使新日期晚于 CA 证书的 NotBefore 日期也是如此。
- NotAfter 日期不能设置为早于已设置的日期,即使新日期早于 CA 证书的 NotAfter 日期。
示例
以下示例调用 SetCertificateProperty 方法来设置 NotBefore 证书属性。 该示例假定 pServer 有效,并且已调用 ICertServerPolicy::SetContext 方法。
HRESULT hr;
ICertServerPolicy *pServer;
SYSTEMTIME st;
BSTR bstrPropName;
VARIANT vPropValue;
bstrPropName = SysAllocString(L"NotBefore");
if (NULL == bstrPropName)
{
printf("Unable to allocate memory.\n");
return E_OUTOFMEMORY;
}
// Set the 'NotBefore' property to Noon on Jan. 1, 2000.
memset( &st, 0, sizeof(SYSTEMTIME));
st.wYear = 2000;
st.wMonth = 1; // Jan.
st.wDay = 1; // 1st day of month.
st.wHour = 12; // Noon.
// Place the date into VARIANT required format.
VariantInit( &vPropValue );
vPropValue.vt = VT_DATE;
if ( !SystemTimeToVariantTime( &st, &vPropValue.date))
{
printf("Unable to convert time.\n");
SysFreeString(bstrPropName);
return E_FAIL
}
// Set the NotBefore property in the certificate:
hr = pServer->SetCertificateProperty(bstrPropName,
PROPTYPE_DATE,
&vPropValue);
SysFreeString(bstrPropName);
VariantClear(&vPropValue);
if (FAILED(hr))
{
printf("SetCertificateProperty failed [%x]\n", hr);
return hr;
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 无受支持的版本 |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | certif.h (包括 Certsrv.h) |
Library | Certidl.lib |
DLL | Certcli.dll |