Прочитать на английском

Поделиться через


CertificateEmbeddingOption Перечисление

Определение

Определяет место хранения сертификата X.509, используемого для подписи.

C#
public enum CertificateEmbeddingOption
Наследование
CertificateEmbeddingOption

Поля

Имя Значение Описание
InCertificatePart 0

Сертификат внедрен в свою часть PackagePart.

InSignaturePart 1

Сертификат внедрен в часть SignaturePart, созданную для добавляемой подписи.

NotEmbedded 2

Сертификат не внедрен в пакет.

Примеры

В следующем примере показано, как использовать CertificateEmbeddingOption для задания PackageDigitalSignatureManager.CertificateOption свойства .

C#
private static void SignAllParts(Package package)
{
    if (package == null)
        throw new ArgumentNullException("SignAllParts(package)");

    // Create the DigitalSignature Manager
    PackageDigitalSignatureManager dsm =
        new PackageDigitalSignatureManager(package);
    dsm.CertificateOption =
        CertificateEmbeddingOption.InSignaturePart;

    // Create a list of all the part URIs in the package to sign
    // (GetParts() also includes PackageRelationship parts).
    System.Collections.Generic.List<Uri> toSign =
        new System.Collections.Generic.List<Uri>();
    foreach (PackagePart packagePart in package.GetParts())
    {
        // Add all package parts to the list for signing.
        toSign.Add(packagePart.Uri);
    }

    // Add the URI for SignatureOrigin PackageRelationship part.
    // The SignatureOrigin relationship is created when Sign() is called.
    // Signing the SignatureOrigin relationship disables counter-signatures.
    toSign.Add(PackUriHelper.GetRelationshipPartUri(dsm.SignatureOrigin));

    // Also sign the SignatureOrigin part.
    toSign.Add(dsm.SignatureOrigin);

    // Add the package relationship to the signature origin to be signed.
    toSign.Add(PackUriHelper.GetRelationshipPartUri(new Uri("/", UriKind.RelativeOrAbsolute)));

    // Sign() will prompt the user to select a Certificate to sign with.
    try
    {
        dsm.Sign(toSign);
    }

    // If there are no certificates or the SmartCard manager is
    // not running, catch the exception and show an error message.
    catch (CryptographicException ex)
    {
        MessageBox.Show(
            "Cannot Sign\n" + ex.Message,
            "No Digital Certificates Available",
            MessageBoxButton.OK,
            MessageBoxImage.Exclamation);
    }
}// end:SignAllParts()

Комментарии

Если сертификат находится NotEmbedded в пакете, приложение, которое проверяет подписи, должно предоставить копию сертификата, чтобы проверить подписанные им подписи.

InSignaturePart добавляет два информационных элемента, <KeyName> и <KeyValue>, как часть KeyInfo поля хранимой цифровой подписи. Элементы <KeyName> и <KeyValue> не обрабатываются в рамках проверки подписи и поэтому не защищены от изменений. Приложения не должны делать никаких предположений относительно допустимости этих двух элементов. Чтобы избежать незамеченных изменений и возможной путаницы, приложения должны использовать InCertificatePart параметр вместо InSignaturePart. Параметр InCertificatePart не предоставляет или не предоставляет или <KeyName><KeyValue>.

Применяется к

Продукт Версии
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10

См. также раздел