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 durch den Standard "Abstrakte Syntax Notation One (ASN.1)" definiert. Das DER-codierte Bytearray wird durch eine Zeichenfolge dargestellt, die entweder eine reine binäre Sequenz ist oder Unicode-codiert ist.

Syntax

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

Die 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 Namen des Computers handelt.

[in] RenewalRequest

Ein VARIANT_BOOL , der angibt, ob die Endentität anfordert, dass das durch den parameter strCertificate identifizierte Zertifikat erneuert werden soll.

[in] strCertificate

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

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

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

[in] Encoding

Ein EncodingType-Enumerationswert , der den Typ der Codierung angibt, die 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 wird. 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 standardmäßigen kryptografischen Anbieter.
InheritNewSimilarKey
Erstellt einen neuen Schlüssel, erbt jedoch den kryptografischen Anbieter, 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 bitweise AND-Vorgang verwenden, um den Schlüsselvererbungswert mit einer beliebigen Kombination der folgenden Werte zu kombinieren.

Wert Bedeutung
InheritRenewalCertificateFlag
Erbt das Erneuerungszertifikat. Durch Angeben dieses Flags wird ein ICertPropertyRenewal-Wert festgelegt.
InheritTemplateFlag
Erbt die Zertifikatvorlage.
InheritSubjectFlag
Erbt den Namen des Betreffs.
InheritExtensionsFlag
Erbt die relevanten Erweiterungen vom Zertifikat.
InheritSubjectAltNameFlag
Erbt die SubjectAlternativeName-Erweiterung .
InheritValidityPeriodFlag
Erbt den Gültigkeitszeitraum.
 

Sie können "InheritNone" auch angeben, um zu verhindern, dass alle Flags in der vorherigen Tabelle (Flags, die nicht mit der Schlüsselvererbung zusammenhängen) standardmäßig implementiert werden. Wenn Sie InheritNone angeben, aber auch ein Flag angeben, das nicht mit der Schlüsselvererbung verknüpft ist, gibt die Methode E_INVALIDARG zurück.

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

Wenn Sie den Parameter InheritOptions auf Null (0) festlegen oder InheritDefault angeben und keine Werte angeben, die nicht mit der Schlüsselvererbung zusammenhängen, werden die folgenden Flags standardmäßig 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, wird ein HRESULT-Wert zurückgegeben, der den Fehler angibt. Mögliche Werte sind die Werte in der folgenden Tabelle, sind jedoch nicht beschränkt. Eine Liste allgemeiner Fehlercodes finden Sie unter "Allgemeine HRESULT-Werte".

Rückgabecode Description
ERROR_ALREADY_INITIALIZED
Das Zertifikatanforderungsobjekt wurde bereits initialisiert.

Bemerkungen

Die InitializeFromCertificate-Methode überprüft die im Parameter InheritOptions 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 erben Von Eingabeoptionen. Das PKCS #10-Objekt erbt:
    • Die Vorlage, wenn eine im ursprünglichen Zertifikat vorhanden ist, und Sie legen den InheritTemplateFlag-Wert fest.
    • Der Betreff distinguished name if you specify InheritSubjectFlag.
    • Der alternative Antragstellername, wenn Sie InheritSubjectAltNameFlag angeben.
    • Die Erweiterungen, wenn Sie InheritExtensionsFlag angeben.
  • Kopiert das originale Zertifikat, falls es erneuert werden soll, in die RenewalCertificate-Eigenschaft in der neuen 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
Mindestens unterstützter Client Windows Vista [nur Desktop-Apps]
Mindestanforderungen für unterstützte Server Windows Server 2008 [Nur Desktop-Apps]
Zielplattform Fenster
Header certenroll.h
DLL CertEnroll.dll

Siehe auch

IX509CertificateRequestPkcs7