ICertRequest::Submit-Methode (certcli.h)

Die Submit-Methode sendet eine Anforderung an den Zertifikatdiensteserver.

Wenn die resultierende Disposition status CR_DISP_ISSUED ist, können Sie das ausgestellte Zertifikat abrufen, indem Sie die ICertRequest3::GetCertificate-Methode aufrufen.

Syntax

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

Parameter

[in] Flags

Gibt das Anforderungsformat, den Anforderungstyp und die Verschlüsselung der Anforderung an. Eines der folgenden Formatattributeflags kann verwendet werden, um anzugeben, wie die Anforderung codiert wird.

Wert Bedeutung
CR_IN_BASE64
Unicode BASE64-Format ohne Anfang/Ende.
CR_IN_BASE64HEADER
Unicode BASE64-Format mit Start/Ende.
CR_IN_BINARY
Binärformat.
CR_IN_ENCODEANY
Probieren Sie alle formate CR_IN_BASE64HEADER, CR_IN_BASE64 oder CR_IN_BINARY aus.
 

Eines der folgenden Formatwertflags kann verwendet werden, um den Typ der Anforderung anzugeben.

Wert Bedeutung
CR_IN_RETURNCHALLENGE
Gibt eine Herausforderung zurück, die an eine Zertifizierungsstelle übermittelt werden kann. Die Herausforderung ist eine vollständige Anforderung für die Zertifikatverwaltung über CMS (CMC). Wenn dieses Flag aktiviert ist, gibt der Aufruf der GetFullResponseProperty-Methode mit dem flag FR_PROP_FULLRESPONSE eine CMC-Antwort zurück, die die Schlüsselnachweisanforderung enthält.
CR_IN_CHALLENGERESPONSE
Der Anruf ist eine Antwort auf eine Herausforderung. Die RequestId muss im strAttributes-Parameter übergeben werden, und die Antwort auf die Anforderung muss im strRequest-Parameter übergeben werden. Dieses Flag sollte aktiviert werden, wenn eine Anwendung die entschlüsselte Anforderung an die Zertifizierungsstelle zurücksenden muss. Anschließend können Sie die GetFullResponseProperty-Methode aufrufen, um das ausgestellte Endentitätszertifikat abzurufen.
CR_IN_CMC
Eine CMC-Anforderung ( Certificate Management over CMS ).
CR_IN_FORMATANY
Probieren Sie alle Formate CR_IN_CMC, CR_IN_KEYGEN, CR_IN_PKCS7 oder CR_IN_PKCS10 aus.
CR_IN_KEYGEN
Keygen-Anforderung (Netscape-Format).
CR_IN_PKCS7
PKCS #7-Anforderung (Verlängerungs- oder Registrierungs-Agent).
CR_IN_PKCS10
PKCS #10-Anforderung.
CR_IN_RPC
Übertragen Sie die Nachrichten mithilfe von RPC anstelle von DCOM.
CR_IN_FULLRESPONSE
Gibt eine vollständige CMC-Antwort zurück.
CR_IN_CRLS
Schließen Sie die aktuellen Zertifikatsperrlisten ein.
CR_IN_MACHINE
Verwenden Sie den Kontext des Schlüsseldienstcomputers.
CR_IN_ROBO
Gibt an, dass die Nachricht im Namen eines anderen Absenders angefordert wird.

Wenn die Zertifizierungsstelle (CA) nicht für "Erneuern im Auftrag von" konfiguriert ist, lehnt die Zertifizierungsstelle die Anforderung ab.

Weitere Informationen zum Aktivieren von "Erneuern im Auftrag von" für die Zertifizierungsstelle finden Sie unter Konfigurieren des Zertifikatregistrierungswebdiensts für den Modus "Nur Verlängerung".

Die Anforderung muss eine Verlängerungsanforderung sein, und das Signaturzertifikat muss dieselbe Vorlage wie die Anforderung verwenden.

Darüber hinaus ist die Anforderung nur erfolgreich, wenn eine der folgenden Bedingungen zutrifft:

  • Das Signaturzertifikat muss von derselben Zertifizierungsstelle ausgestellt worden sein.
  • Die SAN2-Erweiterung des Signaturzertifikats weist den UPN des Antragstellers auf.
  • Der Antragstellername des Signaturzertifikats weist die FQDN_1779 des Antragstellers auf.
Windows Server 2008 und Windows Server 2003: Dieses Flag wird nicht unterstützt.
CR_IN_CLIENTIDNONE
Schließen Sie keine Daten in die Anforderung ein, die den Client identifiziert.

Windows Server 2008 und Windows Server 2003: Dieses Flag wird nicht unterstützt.

CR_IN_CONNECTONLY
Gibt an, dass die DCOM-Verbindung mit dem Server hergestellt wird, die Anforderung jedoch nicht übermittelt wird.

[in] strRequest

Ein Zeiger auf die Zeichenfolge, die die Zertifikatanforderung enthält. Wenn CR_IN_BASE64 oder CR_IN_BASE64HEADER in Flags angegeben wurde, muss strRequest eine Unicode-Zeichenfolge sein.

[in] strAttributes

Ein Zeiger auf die Zeichenfolge, die optionale zusätzliche Attribute für die Anforderung enthält. Jedes Attribut ist ein Name-Wert-Zeichenfolgenpaar. Das Doppelpunktzeichen trennt den Namen und den Wert, und ein Zeilenumbruchzeichen trennt mehrere Name-Wert-Paare, z. B.:

C++ "AttributeName1:AttributeValue1\nAttributeName2:AttributeValue2"
VB "AttributeName1:AttributeValue1" & vbNewLine & "AttributeName2:AttributeValue2"
Wenn der Zertifikatdiensteserver Attributnamen analysiert, werden Leerzeichen, Bindestriche (Minuszeichen) und Groß-/Kleinschreibung ignoriert. Beispielsweise sind "Attributname1", "Attributname1" und "Attributname1" gleichwertig. Für Attributwerte ignoriert der Zertifikatdiensteserver führende und nachfolgende Leerzeichen.

[in] strConfig

Stellt eine gültige Konfigurationszeichenfolge für den Zertifikatdiensteserver dar. Die Zeichenfolge kann entweder eine HTTPS-URL für einen Registrierungsserver oder im Format ComputerName\CAName sein, wobei ComputerName der Netzwerkname des Servers und CAName der allgemeine Name der Zertifizierungsstelle ist, wie er während der Einrichtung der Zertifikatdienste eingegeben wurde. Informationen zum Namen der Konfigurationszeichenfolge finden Sie unter ICertConfig.

Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP: Eine HTTPS-URL wird nicht als Eingabe unterstützt.

[out, retval] pDisposition

Ein Zeiger auf den Dispositionswert der Anforderung.

Rückgabewert

C++

Wenn die Methode erfolgreich ist, gibt die Methode S_OK zurück.

Nach erfolgreichem Abschluss dieser Funktion wird *pDisposition auf einen der Werte in der folgenden Tabelle festgelegt.

Wenn die Methode fehlschlägt, gibt sie einen HRESULT-Wert zurück, der den Fehler angibt. Eine Liste allgemeiner Fehlercodes finden Sie unter Allgemeine HRESULT-Werte.

VB

Der Rückgabewert gibt die Disposition der Anforderung an. Die Disposition ist einer der folgenden Werte.
Rückgabecode Beschreibung
CR_DISP_DENIED
Anforderung abgelehnt
CR_DISP_ERROR
Fehler bei der Anforderung
CR_DISP_INCOMPLETE
Anforderung wurde nicht abgeschlossen
CR_DISP_ISSUED
Zertifikat ausgestellt am
CR_DISP_ISSUED_OUT_OF_BAND
Zertifikat separat ausgestellt
CR_DISP_UNDER_SUBMISSION
Anforderung, die im Rahmen der Übermittlung aufgenommen wurde

Hinweise

Wenn Sie eine BASE64-Formatanforderung aus einer Datei lesen, stellen Sie sicher, dass sich die Datei in Unicode befindet, oder konvertieren Sie sie aus ASCII in Unicode, bevor Sie die Anforderung mit dieser Methode übermitteln.

Beispiele

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile certcli.h (include Certsrv.h)
Bibliothek Certidl.lib
DLL Certcli.dll

Weitere Informationen

CCertRequest

ICEnroll::createPKCS10

ICertConfig

ICertRequest

ICertRequest2

ICertRequest3