Partager via


ICertRequest ::Submit, méthode (certcli.h)

La méthode Submit envoie une demande au serveur des services de certificats.

Si le status de destruction résultant est CR_DISP_ISSUED, vous pouvez récupérer le certificat émis en appelant la méthode ICertRequest3 ::GetCertificate.

Syntaxe

HRESULT Submit(
  [in]          LONG       Flags,
  [in]          const BSTR strRequest,
  [in]          const BSTR strAttributes,
  [in]          const BSTR strConfig,
  [out, retval] LONG       *pDisposition
);

Paramètres

[in] Flags

Spécifie le format de la demande, le type de requête et si la demande est chiffrée. L’un des indicateurs d’attribut de format suivants peut être utilisé pour spécifier la façon dont la requête est encodée.

Valeur Signification
CR_IN_BASE64
Format Unicode BASE64 sans début/fin.
CR_IN_BASE64HEADER
Format Unicode BASE64 avec début/fin.
CR_IN_BINARY
Format binaire.
CR_IN_ENCODEANY
Essayez tous les formats CR_IN_BASE64HEADER, CR_IN_BASE64 ou CR_IN_BINARY.
 

L’un des indicateurs de valeur de format suivants peut être utilisé pour spécifier le type de la demande.

Valeur Signification
CR_IN_RETURNCHALLENGE
Retourne un défi qui peut être soumis à une autorité de certification. Le défi est une demande complète de gestion des certificats sur CMS (CMC). Lorsque cet indicateur est activé, l’appel de la méthode GetFullResponseProperty avec l’indicateur FR_PROP_FULLRESPONSE renvoie une réponse CMC qui contient une demande d’attestation de clé.
CR_IN_CHALLENGERESPONSE
L’appel est une réponse à un défi. Le RequestId doit être passé dans le paramètre strAttributes et la réponse au défi doit être passée dans le paramètre strRequest . Cet indicateur doit être activé lorsqu’une application doit renvoyer le défi déchiffré à l’autorité de certification. Vous pouvez ensuite appeler la méthode GetFullResponseProperty pour obtenir le certificat d’entité de fin émis.
CR_IN_CMC
Une demande de gestion des certificats sur CMS (CMC).
CR_IN_FORMATANY
Essayez tous les formats CR_IN_CMC, CR_IN_KEYGEN, CR_IN_PKCS7 ou CR_IN_PKCS10.
CR_IN_KEYGEN
Requête Keygen (format Netscape).
CR_IN_PKCS7
Demande PKCS #7 (agent de renouvellement ou d’inscription).
CR_IN_PKCS10
Requête PKCS #10.
CR_IN_RPC
Transmettez les messages à l’aide de RPC au lieu de DCOM.
CR_IN_FULLRESPONSE
Retourne une réponse CMC complète.
CR_IN_CRLS
Incluez les listes de révocation de certificats actuelles.
CR_IN_MACHINE
Utilisez le contexte de l’ordinateur de service clé.
CR_IN_ROBO
Indique que le message est demandé pour le compte d’un autre expéditeur.

Si l’autorité de certification n’est pas configurée pour « renouveler au nom de », l’autorité de certification rejette la demande.

Pour plus d’informations sur l’activation de « renouveler pour le compte de » sur l’autorité de certification, consultez Configuration du service web d’inscription de certificat pour le mode renouvellement uniquement.

La demande doit être une demande de renouvellement et le certificat de signature doit utiliser le même modèle que la demande.

En outre, la demande réussit uniquement lorsque l’une des conditions suivantes est remplie :

  • Le certificat de signature doit avoir été émis par la même autorité de certification
  • L’extension SAN2 du certificat de signature a l’UPN de l’objet
  • Le nom de l’objet du certificat de signature a le FQDN_1779 de l’objet
Windows Server 2008 et Windows Server 2003 : Cet indicateur n’est pas pris en charge.
CR_IN_CLIENTIDNONE
N’incluez pas dans les données de demande qui identifient le client.

Windows Server 2008 et Windows Server 2003 : Cet indicateur n’est pas pris en charge.

CR_IN_CONNECTONLY
Spécifie que la connexion DCOM avec le serveur est établie, mais que la demande n’est pas envoyée.

[in] strRequest

Pointeur vers la chaîne qui contient la demande de certificat. Si CR_IN_BASE64 ou CR_IN_BASE64HEADER a été spécifié dans Indicateurs, strRequest doit être une chaîne Unicode.

[in] strAttributes

Pointeur vers la chaîne qui contient des attributs facultatifs supplémentaires pour la requête. Chaque attribut est une paire de chaînes nom-valeur. Le caractère deux-points sépare le nom et la valeur, et un caractère de nouvelle ligne sépare plusieurs paires nom-valeur, par exemple :

C++ « AttributeName1 :AttributeValue1\nAttributeName2 :AttributeValue2 »
VB « AttributeName1 :AttributeValue1 » & vbNewLine & « AttributeName2 :AttributeValue2 »
Lorsque le serveur des services de certificats analyse les noms d’attributs, il ignore les espaces, les traits d’union (signes moins) et la casse. Par exemple, « AttributeName1 », « Attribute Name1 » et « Attribute-name1 » sont tous équivalents. Pour les valeurs d’attribut, le serveur des services de certificats ignore les espaces blancs de début et de fin.

[in] strConfig

Représente une chaîne de configuration valide pour le serveur des services de certificats. La chaîne peut être une URL HTTPS pour un serveur d’inscription ou sous la forme ComputerName\CAName, où ComputerName est le nom réseau du serveur et CAName est le nom commun de l’autorité de certification, tel qu’entré lors de l’installation des services de certificats. Pour plus d’informations sur le nom de la chaîne de configuration, consultez ICertConfig.

Windows Server 2008, Windows Vista, Windows Server 2003 et Windows XP : Une URL HTTPS n’est pas prise en charge en tant qu’entrée.

[out, retval] pDisposition

Pointeur vers la valeur de destruction de la requête.

Valeur retournée

C++

Si la méthode réussit, la méthode retourne S_OK.

Une fois cette fonction terminée, *pDisposition est défini sur l’une des valeurs du tableau suivant.

Si la méthode échoue, elle retourne une valeur HRESULT qui indique l’erreur. Pour obtenir la liste des codes d’erreur courants, consultez Valeurs HRESULT courantes.

VB

La valeur de retour spécifie la disposition de la requête. La disposition est l’une des valeurs suivantes.
Code de retour Description
CR_DISP_DENIED
Demande refusée
CR_DISP_ERROR
Échec de la demande
CR_DISP_INCOMPLETE
La demande n’est pas terminée
CR_DISP_ISSUED
Certificat émis
CR_DISP_ISSUED_OUT_OF_BAND
Certificat émis séparément
CR_DISP_UNDER_SUBMISSION
Demande effectuée sous soumission

Remarques

Si vous lisez une demande de format BASE64 à partir d’un fichier, vérifiez que le fichier est en Unicode ou convertissez-le d’ASCII en Unicode avant d’envoyer la demande avec cette méthode.

Exemples

    //  The pointer to the interface object.
    ICertRequest * pCertRequest = NULL;

    //  The variable for the computer\CAName.
    BSTR         bstrCA = NULL;

    //  The variable for the request.
    BSTR         bstrRequest = NULL;

    //  The variable for the attributes.
    BSTR         bstrAttribs = NULL;

    //  The variable for the disposition code.
    long        nDisp;

    HRESULT     hr;

    //  Initialize COM.
    hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

    //  Check status.
    if (FAILED(hr))
    {
        printf("Failed CoInitializeEx [%x]\n", hr);
        goto error;
    }

    //  Instantiate the CertConfig object.
    hr = CoCreateInstance(CLSID_CCertRequest,
                          NULL,
                          CLSCTX_INPROC_SERVER,
                          IID_ICertRequest,
                          (void **)&pCertRequest);
    if (FAILED(hr))
    {
        printf("Failed CoCreateInstance pCertRequest [%x]\n", hr);
        goto error;
    }

    //  Specify the certification authority.
    //  Note: In C++, produce one backslash (\) by using two.
    bstrCA = SysAllocString(L"server01\\myCAName");

    //  Create the request (not shown), and assign it to bstrRequest,
    //  for example, use ICEnroll::createPKCS10.

    //  Generate the attributes. In this case, no attributes
    //  are specified.
    bstrAttribs = SysAllocString(L"");
    
    //  Submit the request.
    hr = pCertRequest->Submit(CR_IN_BASE64 | CR_IN_PKCS10, 
                              bstrRequest,
                              bstrAttribs,
                              bstrCA, 
                              &nDisp );
    if (FAILED(hr))
    {
        printf("Failed Submit [%x]\n", hr);
        goto error;
    }
    else
    {
        //  Use the disposition value as needed.
    }

    //  Done processing.

error:

    //  Free BSTR values.
    if (NULL != bstrCA)
        SysFreeString(bstrCA);

    if (NULL != bstrRequest)
        SysFreeString(bstrRequest);

    if (NULL != bstrAttribs)
        SysFreeString(bstrAttribs);

    //  Clean up object resources.
    if (NULL != pCertRequest)
        pCertRequest->Release();

    //  Free COM resources.
    CoUninitialize();

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête certcli.h (include Certsrv.h)
Bibliothèque Certidl.lib
DLL Certcli.dll

Voir aussi

CCertRequest

ICEnroll ::createPKCS10

ICertConfig

ICertRequest

ICertRequest2

ICertRequest3