ICertServerPolicy::SetCertificateProperty 方法 (certif.h)

使用 SetCertificateProperty 方法设置与证书关联的属性。

语法

HRESULT SetCertificateProperty(
  [in] const BSTR    strPropertyName,
  [in] LONG          PropertyType,
  [in] const VARIANT *pvarPropertyValue
);

参数

[in] strPropertyName

指定要设置的属性。 可以设置与证书关联的任何 名称属性

此外,还可以设置以下证书属性。

含义
NotBefore
日期/时间
证书在给定日期之前无效。
NotAfter
日期/时间
证书在给定日期之后无效。
GeneralFlags
将此属性设置为 0x00000400 以防止请求保留在 CA 数据库中。
谨慎 设置此属性时,请勿覆盖 GetCertificateProperty 返回的任何掩码值。 通过使用现有值执行按位 OR 来设置值。
 
Windows Storage Server 2003: 不支持此字段。
CrossForest
PROPTYPE_LONG
一个布尔值,指定 CA 是否应运行跨林注册模式。

Windows Server 2008 和 Windows Server 2003: 不支持跨林注册。 从 Windows Server 2008 R2 开始支持跨林注册。

RequesterSAMName
PROPTYPE_STRING
告知 CA 将请求者帐户名称 (“RequesterName”) 和可分辨名称。
RequesterUPN
PROPTYPE_STRING
告知 CA 将请求者 的用户主体名称 (UPN) 转换为请求者名称 (“RequesterName”) 并设置请求者名称和请求者可分辨名称。
RequesterDN
PROPTYPE_STRING
告知 CA 将请求者的 FQDN 1779 名称转换为请求者名称,并将请求者名称 (“RequesterName”) 和请求者可分辨名称。

[in] PropertyType

指定要设置的属性的类型。 Type 参数必须与 VARIANT 结构的 vt 字段中设置的 pvarValue 数据类型一致。 Type 参数可以设置为以下类型之一。

含义
PROPTYPE_LONG
有符号的长数据。
PROPTYPE_DATE
日期/时间数据。
PROPTYPE_BINARY
二进制数据。
PROPTYPE_STRING
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

另请参阅

ICertServerExit::GetCertificateProperty

ICertServerPolicy

ICertServerPolicy::SetContext

名称属性