Condividi tramite


Metodo ICertRequest::Submit (certcli.h)

Il metodo Submit invia una richiesta al server Servizi certificati.

Se lo stato di eliminazione risultante è CR_DISP_ISSUED, è possibile recuperare il certificato rilasciato chiamando il metodo ICertRequest3::GetCertificate .

Sintassi

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

Parametri

[in] Flags

Specifica il formato della richiesta, il tipo di richiesta e se la richiesta è crittografata. Uno dei flag di attributi di formato seguenti può essere usato per specificare la modalità di codifica della richiesta.

Valore Significato
CR_IN_BASE64
Formato UNICODE BASE64 senza inizio/fine.
CR_IN_BASE64HEADER
Formato Unicode BASE64 con inizio/fine.
CR_IN_BINARY
Formato binario.
CR_IN_ENCODEANY
Provare tutti i formati CR_IN_BASE64HEADER, CR_IN_BASE64 o CR_IN_BINARY.
 

Uno dei flag di formato seguenti può essere usato per specificare il tipo della richiesta.

Valore Significato
CR_IN_RETURNCHALLENGE
Restituire una richiesta che può essere inviata a una CA. La sfida è una richiesta completa di Gestione certificati su CMS (CMC). Quando questo flag viene attivato, chiamare il metodo GetFullResponseProperty con il flag FR_PROP_FULLRESPONSE restituisce una risposta CMC che contiene una richiesta di attestazione chiave.
CR_IN_CHALLENGERESPONSE
La chiamata è una risposta a una sfida. RequestId deve essere passato nel parametro strAttributes e la risposta alla richiesta deve essere passata nel parametro strRequest . Questo flag deve essere attivato quando un'applicazione deve inviare la richiesta decrittografata alla CA. È quindi possibile chiamare il metodo GetFullResponseProperty per ottenere il certificato dell'entità finale emesso.
CR_IN_CMC
Richiesta gestione certificati su CMS (CMC).
CR_IN_FORMATANY
Provare tutti i formati CR_IN_CMC, CR_IN_KEYGEN, CR_IN_PKCS7 o CR_IN_PKCS10.
CR_IN_KEYGEN
Richiesta Keygen (formato Netscape).
CR_IN_PKCS7
Richiesta PKCS #7 (rinnovo o agente di registrazione).
CR_IN_PKCS10
Richiesta PKCS #10.
CR_IN_RPC
Trasmettere i messaggi usando RPC anziché DCOM.
CR_IN_FULLRESPONSE
Restituisce una risposta CMC completa.
CR_IN_CRLS
Includere gli elenchi di revoche di certificati correnti.
CR_IN_MACHINE
Usare il contesto del computer del servizio chiavi.
CR_IN_ROBO
Indica che il messaggio viene richiesto per conto di un altro mittente.

Se l'autorità di certificazione (CA) non è configurata per "rinnovare per conto di", la CA rifiuta la richiesta.

Per altre informazioni sull'abilitazione del "rinnovo per conto" nella CA, vedere Configurazione del servizio Web registrazione certificati per la modalità di rinnovo.

La richiesta deve essere una richiesta di rinnovo e il certificato di firma deve usare lo stesso modello della richiesta.

Inoltre, la richiesta avrà esito positivo solo quando una delle condizioni seguenti è true:

  • Il certificato di firma deve essere stato rilasciato dalla stessa CA
  • L'estensione SAN2 del certificato di firma ha l'UPN del soggetto
  • Il nome soggetto del certificato di firma ha il FQDN_1779 dell'oggetto
Windows Server 2008 e Windows Server 2003: Questo flag non è supportato.
CR_IN_CLIENTIDNONE
Non includere nei dati della richiesta che identificano il client.

Windows Server 2008 e Windows Server 2003: Questo flag non è supportato.

CR_IN_CONNECTONLY
Specifica che la connessione DCOM con il server viene stabilita, ma la richiesta non viene inviata.

[in] strRequest

Puntatore alla stringa contenente la richiesta del certificato. Se CR_IN_BASE64 o CR_IN_BASE64HEADER è stato specificato in Flag, strRequest deve essere una stringa Unicode.

[in] strAttributes

Puntatore alla stringa contenente attributi aggiuntivi facoltativi per la richiesta. Ogni attributo è una coppia di stringhe nome-valore. Il carattere di punti separa il nome e il valore e un carattere nuova riga separa più coppie nome-valore, ad esempio:

C++ "AttributeName1:AttributeValue1\nAttributeName2:AttributeValue2"
VB "AttributeName1:AttributeValue1" & vbNewLine & "AttributeName2:AttributeValue2"
Quando il server Servizi certificati analizza i nomi degli attributi, ignora spazi, trattini (segni meno) e maiuscole. Ad esempio, "AttributeName1", "Attribute Name1" e "Attribute-name1" sono tutti equivalenti. Per i valori degli attributi, il server Servizi certificati ignora lo spazio vuoto iniziale e finale.

[in] strConfig

Rappresenta una stringa di configurazione valida per il server Servizi certificati. La stringa può essere un URL HTTPS per un server di registrazione o nel formato ComputerName\CAName, dove ComputerName è il nome di rete del server e CAName è il nome comune dell'autorità di certificazione, come immesso durante l'installazione di Servizi certificati. Per informazioni sul nome della stringa di configurazione, vedere ICertConfig.

Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Un URL HTTPS non è supportato come input.

[out, retval] pDisposition

Puntatore al valore di eliminazione della richiesta.

Valore restituito

C++

Se il metodo ha esito positivo, il metodo restituisce S_OK.

Al termine di questa funzione, *pDisposition è impostato su uno dei valori della tabella seguente.

Se il metodo ha esito negativo, restituisce un valore HRESULT che indica l'errore. Per un elenco di codici di errore comuni, vedere Valori HRESULT comuni.

VB

Il valore restituito specifica l'eliminazione della richiesta. L'eliminazione è uno dei valori seguenti.
Codice restituito Descrizione
CR_DISP_DENIED
Richiesta negata
CR_DISP_ERROR
Richiesta non riuscita
CR_DISP_INCOMPLETE
Richiesta non completata
CR_DISP_ISSUED
Certificato rilasciato
CR_DISP_ISSUED_OUT_OF_BAND
Certificato rilasciato separatamente
CR_DISP_UNDER_SUBMISSION
Richiesta eseguita in invio

Commenti

Se si legge una richiesta di formato BASE64 da un file, assicurarsi che il file sia in Unicode o convertirlo da ASCII a Unicode prima di inviare la richiesta con questo metodo.

Esempio

    //  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();

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione certcli.h (include Certsrv.h)
Libreria Certidl.lib
DLL Certcli.dll

Vedi anche

CCertRequest

ICEnroll::createPKCS10

ICertConfig

ICertRequest

ICertRequest2

ICertRequest3