CertificateEmbeddingOption Enumeración

Definición

Especifica la ubicación donde se almacena el certificado X.509 que se usa en la firma.

public enum CertificateEmbeddingOption
Herencia
CertificateEmbeddingOption

Campos

Nombre Valor Description
InCertificatePart 0

El certificado se inserta en su propia PackagePart.

InSignaturePart 1

El certificado se inserta en la SignaturePart que se crea para la signatura que se está agregando.

NotEmbedded 2

El certificado no está insertado en el paquete.

Ejemplos

En el ejemplo siguiente se muestra cómo usar CertificateEmbeddingOption para establecer la PackageDigitalSignatureManager.CertificateOption propiedad .

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

Comentarios

Si el certificado está NotEmbedded en el paquete, una aplicación que comprueba las firmas debe proporcionar una copia del certificado para comprobar las firmas firmadas por él.

InSignaturePart agrega dos elementos informativos, <KeyName> y <KeyValue>, como parte del KeyInfo campo de la firma digital almacenada. Los <KeyName> elementos y <KeyValue> no se procesan como parte de la validación de firmas y, por tanto, no son seguros de la modificación. Las aplicaciones no deben suponer la validez de estos dos elementos. Para evitar modificaciones no detectadas y posibles confusiones, las aplicaciones deben usar la InCertificatePart opción en lugar de InSignaturePart. La InCertificatePart opción no proporciona ni expone <KeyName> ni <KeyValue>.

Se aplica a

Producto Versiones
.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

Consulte también