Freigeben über


IX509CertificateRequestPkcs7::InitializeFromCertificate-Methode (certenroll.h)

Die InitializeFromCertificate-Methode initialisiert die Zertifikatanforderung mithilfe eines vorhandenen Zertifikats. Das Zertifikat ist in einem Bytearray enthalten, das mithilfe von Distinguished Encoding Rules (DER) codiert wird, wie im ASN.1-Standard (Abstract Syntax Notation One) definiert. Das DER-codierte Bytearray wird durch eine Zeichenfolge dargestellt, die entweder eine reine Binärsequenz oder Unicode-codiert ist.

Syntax

HRESULT InitializeFromCertificate(
  [in] X509CertificateEnrollmentContext Context,
  [in] VARIANT_BOOL                     RenewalRequest,
  [in] BSTR                             strCertificate,
  [in] EncodingType                     Encoding,
  [in] X509RequestInheritOptions        InheritOptions
);

Parameter

[in] Context

Ein X509CertificateEnrollmentContext-Enumerationswert , der angibt, ob das angeforderte Zertifikat für einen Endbenutzer, einen Computer oder einen Administrator bestimmt ist, der im Auftrag des Computers handelt.

[in] RenewalRequest

Eine VARIANT_BOOL , die angibt, ob die Endentität die Erneuerung des durch den strCertificate-Parameter identifizierten Zertifikats anfordert.

[in] strCertificate

Eine BSTR-Variable , die das DER-codierte Zertifikat enthält.

Ab Windows 7 und Windows Server 2008 R2 können Sie anstelle eines codierten Zertifikats einen Fingerabdruck oder eine Seriennummer angeben. Dadurch durchsucht die Funktion die entsprechenden lokalen Speicher nach dem übereinstimmenden Zertifikat. Berücksichtigen Sie dabei Folgendes:

  • Der BSTR muss eine gerade Anzahl von Hexadezimalstellen sein.
  • Leerzeichen zwischen Hexadezimalpaaren werden ignoriert.
  • Der Encoding-Parameter muss auf XCN_CRYPT_STRING_HEXRAW festgelegt werden.
  • Der Context-Parameter bestimmt, ob die lokalen Oder Computerspeicher oder beides durchsucht wird.
  • Wenn ein privater Schlüssel benötigt wird, werden nur die persönlichen Speicher und die Anforderungsspeicher durchsucht.
  • Wenn kein privater Schlüssel benötigt wird, werden auch die Stamm- und Zwischenspeicher der Zertifizierungsstellen durchsucht.

[in] Encoding

Ein EncodingType-Enumerationswert , der den Codierungstyp angibt, der auf das DER-codierte Zertifikat angewendet wird. Der Standardwert ist XCN_CRYPT_STRING_BASE64.

[in] InheritOptions

Ein X509RequestInheritOptions-Enumerationswert , der angibt, wie das Zertifikatanforderungsobjekt aus dem vorhandenen Zertifikat erstellt werden soll. Sie können angeben, wie ein Schlüssel geerbt werden soll, indem Sie einen der folgenden Werte auswählen. Der Standardwert ist InheritDefault.

Wert Bedeutung
InheritDefault
Anbieter- und Schlüsselvererbung ist nicht angegeben.
InheritNewDefaultKey
Erstellt einen neuen Schlüssel, erbt jedoch den Kryptografiestandardanbieter.
InheritNewSimilarKey
Erstellt einen neuen Schlüssel, erbt jedoch den Kryptografieanbieter, der zum Erstellen des vorhandenen Zertifikats verwendet wird.
InheritPrivateKey
Erbt die privaten und öffentlichen Schlüssel.
InheritPublicKey
Erbt nur den öffentlichen Schlüssel.
 

Sie können auch einen bitweisen AND-Vorgang verwenden, um den Schlüsselvererbungswert mit einer beliebigen Kombination der folgenden Werte zu kombinieren.

Wert Bedeutung
InheritRenewalCertificateFlag
Erbt das Erneuerungszertifikat. Wenn Sie dieses Flag angeben, wird ein ICertPropertyRenewal-Wert festgelegt.
InheritTemplateFlag
Erbt die Zertifikatvorlage.
InheritSubjectFlag
Erbt den Distinguished-Namen des Antragstellers.
InheritExtensionsFlag
Erbt die relevanten Erweiterungen vom Zertifikat.
InheritSubjectAltNameFlag
Erbt die Erweiterung SubjectAlternativeName .
InheritValidityPeriodFlag
Erbt den Gültigkeitszeitraum.
 

Sie können auch InheritNone angeben, um zu verhindern, dass eines der Flags in der vorherigen Tabelle (Flags, die sich nicht auf die Schlüsselvererbung beziehen) standardmäßig implementiert wird. Wenn Sie InheritNone angeben, aber auch ein Flag angeben, das sich nicht auf die Schlüsselvererbung bezieht, gibt die Methode E_INVALIDARG zurück.

Wenn Sie den InheritOptions-Parameter auf Null (0) festlegen oder InheritDefault angeben und keinen Schlüsselvererbungswert angeben, wird standardmäßig InheritNewSimilarKey verwendet.

Wenn Sie den InheritOptions-Parameter auf Null (0) festlegen oder InheritDefault angeben und keinen der Werte angeben, die sich nicht auf die Schlüsselvererbung beziehen, werden standardmäßig die folgenden Flags festgelegt:

  • InheritSubjectFlag
  • InheritExtensionsFlag
  • InheritValidityPeriodFlag
  • InheritTemplateFlag (wenn das Zertifikat eine Vorlagenerweiterung enthält)
  • InheritRenewalCertificateFlag (wenn der Client ein Zertifikat erneuert)

Rückgabewert

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

Wenn die Funktion fehlschlägt, gibt sie einen HRESULT-Wert zurück, der den Fehler angibt. Mögliches Werte (aber nicht die Einzigen) sind die in der folgenden Tabelle. Eine Liste allgemeiner Fehlercodes finden Sie unter Allgemeine HRESULT-Werte.

Rückgabecode Beschreibung
ERROR_ALREADY_INITIALIZED
Das Zertifikatanforderungsobjekt wurde bereits initialisiert.

Hinweise

Die InitializeFromCertificate-Methode überprüft die im InheritOptions-Parameter angegebenen Optionen und initialisiert ein neues PKCS #7-Anforderungsobjekt, indem die folgenden Aktionen ausgeführt werden:

  • Erstellt ein PKCS #10-Anforderungsobjekt aus dem Zertifikat, dem Registrierungskontext und den bei der Eingabe angegebenen Erbeoptionen. Das PKCS #10-Objekt erbt:
    • Die Vorlage, wenn sie im ursprünglichen Zertifikat vorhanden ist und Sie den Wert InheritTemplateFlag festlegen.
    • Der distinguished name des Antragstellers, wenn Sie InheritSubjectFlag angeben.
    • Der alternative Antragstellername, wenn Sie InheritSubjectAltNameFlag angeben.
    • Die Erweiterungen, wenn Sie InheritExtensionsFlag angeben.
  • Kopiert das ursprüngliche Zertifikat, falls es erneuert werden soll, in die RenewalCertificate-Eigenschaft für die neue PKCS #10-Anforderung.
  • Erstellt ein ISignerCertificate aus dem ursprünglichen Zertifikat, wenn es erneuert werden soll, und legt es für die SignerCertificate-Eigenschaft fest .
  • Legt die PKCS #10-Anforderung als inneres Anforderungsobjekt fest.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile certenroll.h
DLL CertEnroll.dll

Weitere Informationen

IX509CertificateRequestPkcs7