Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Gebruik de methode ICertServerPolicy::SetCertificateProperty om de onderwerpeigenschappen van een certificaat in te stellen. Onderwerpeigenschappen zijn eigenschappen die betrekking hebben op de eigenaar van het certificaat of de persoon die het certificaat heeft aangevraagd. Voor een lijst met subjecteigenschappen, zie Naameigenschappen.
U kunt ook de methode SetCertificateProperty gebruiken om de certificaateigenschappen NotBefore en NotAfter in te stellen. Zie Certificaateigenschappenvoor een beschrijving van de eigenschappen NotBefore en NotAfter.
Gebruik de methode ICertServerPolicy::SetCertificateExtension om een willekeurig aantal extensies toe te voegen aan het certificaat. U kunt extensies gebruiken om aanvullende onderwerp- of gebruiksgegevens aan het certificaat toe te voegen. Zie Extension Handlersvoor meer informatie.
In het volgende voorbeeld wordt een certificaateigenschap en -extensie ingesteld op een certificaat. U roept de SetCertificateProperty- en SetCertificateExtension--methoden aan in uw ICertPolicy2::VerifyRequest--implementatie. Het voorbeeld is geen volledige VerifyRequest implementatie; in het voorbeeld wordt geen verificatielogica weergegeven.
#include <windows.h>
#include <stdio.h>
STDMETHODIMP CCertPolicy::VerifyRequest(
BSTR const strConfig,
LONG Context,
LONG bNewRequest,
LONG Flags,
LONG __RPC_FAR *pDisposition)
{
HRESULT hr = S_OK;
ICertServerPolicy *pServer = NULL;
BSTR bstrPropName = NULL;
VARIANT vPropValue;
BSTR bstrExtName = NULL;
VARIANT vExtValue;
// Retrieve an ICertServerPolicy interface pointer.
hr = CoCreateInstance( CLSID_CCertServerPolicy,
NULL,
CLSCTX_INPROC_SERVER,
IID_ICertServerPolicy,
(void **) &pServer );
if (FAILED( hr ))
{
printf("Failed CoCreateInstance for ICertServerPolicy "
"- %x\n", hr );
return hr;
}
// Set the context to which this request refers.
hr = pServer->SetContext(Context);
if (FAILED( hr ))
{
printf("Failed SetContext(%u) - %x\n", Context, hr );
pServer->Release();
return hr;
}
// Specify the subject property to set on the certificate.
bstrPropName = SysAllocString(L"Subject.EMail");
if ( NULL == bstrPropName )
{
hr = E_OUTOFMEMORY;
printf("Failed SysAllocString for bstrPropName "
"(no memory)\n" );
pServer->Release();
return hr;
}
VariantInit( &vPropValue );
vPropValue.VT_BSTR;
vPropValue.bstrVal = SysAllocString(L"someone@example.com");
if ( NULL == vPropValue.bstrVal )
{
hr = E_OUTOFMEMORY;
printf("Failed SysAllocString for vPropValue "
"(no memory)\n" );
SysFreeString(bstrPropName);
pServer->Release();
return hr;
}
// Set the subject property on the certificate.
hr = pServer->SetCertificateProperty( bstrPropName,
PROPTYPE_STRING,
&vPropValue );
SysFreeString(bstrPropName);
VariantClear(&vPropValue);
if (FAILED(hr))
{
printf("Failed SetCertificateProperty - %x\n", hr);
pServer->Release();
return hr;
}
// Specify the extension property to set on the certificate.
bstrExtName = SysAllocString(L"2.29.38.4");
if ( NULL == bstrExtName )
{
hr = E_OUTOFMEMORY;
printf("Failed SysAllocString for bstrExtName "
"(no memory)\n" );
pServer->Release();
return hr;
}
VariantInit( &vExtValue );
vExtValue.VT_BSTR;
vExtValue.bstrVal = SysAllocString
(L"https://example.microsoft.com");
if ( NULL == vExtValue.bstrVal )
{
hr = E_OUTOFMEMORY;
printf("Failed SysAllocString for vExtValue (no memory)\n" );
SysFreeString(bstrExtName);
pServer->Release();
return hr;
}
// Set the extension property on the certificate.
hr = pServer->SetCertificateExtension( bstrExtName,
PROPTYPE_STRING,
EXTENSION_CRITICAL_FLAG,
&vExtValue );
SysFreeString(bstrExtName);
VariantClear(&vExtValue);
if (FAILED(hr))
{
printf("Failed SetCertificateExtension - %x\n", hr);
pServer->Release();
return hr;
}
pServer->Release();
return(hr);
}