CertificateEmbeddingOption Enum
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee geeft u de locatie op waar het X.509-certificaat dat wordt gebruikt bij ondertekening wordt opgeslagen.
public enum class CertificateEmbeddingOption
public enum CertificateEmbeddingOption
type CertificateEmbeddingOption =
Public Enum CertificateEmbeddingOption
- Overname
Velden
| Name | Waarde | Description |
|---|---|---|
| InCertificatePart | 0 | Het certificaat is ingesloten in een eigen PackagePart. |
| InSignaturePart | 1 | Het certificaat wordt ingesloten in het SignaturePart certificaat dat wordt gemaakt voor de handtekening die wordt toegevoegd. |
| NotEmbedded | 2 | Het certificaat is niet ingesloten in het pakket. |
Voorbeelden
In het volgende voorbeeld ziet u hoe u deze kunt gebruiken CertificateEmbeddingOption om de PackageDigitalSignatureManager.CertificateOption eigenschap in te stellen.
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()
Private Shared Sub SignAllParts(ByVal package As Package)
If package Is Nothing Then
Throw New ArgumentNullException("SignAllParts(package)")
End If
' Create the DigitalSignature Manager
Dim dsm As 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).
Dim toSign As New System.Collections.Generic.List(Of Uri)()
For Each packagePart As PackagePart In package.GetParts()
' Add all package parts to the list for signing.
toSign.Add(packagePart.Uri)
Next
' 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)
Catch ex As CryptographicException
' If there are no certificates or the SmartCard manager is
' not running, catch the exception and show an error message.
MessageBox.Show("Cannot Sign" & vbLf & ex.Message, "No Digital Certificates Available", MessageBoxButton.OK, MessageBoxImage.Exclamation)
End Try
End Sub
Private Shared Function InlineAssignHelper(Of T)(ByRef target As T, ByVal value As T) As T
target = value
Return value
End Function
' end:SignAllParts()
Opmerkingen
Als het certificaat zich in het pakket NotEmbedded bevindt, moet een toepassing die handtekeningen verifieert, een kopie van het certificaat opgeven om de handtekeningen te verifiëren die door het certificaat zijn ondertekend.
InSignaturePart voegt twee informatieve elementen <KeyName> toe en <KeyValue>, als onderdeel van het KeyInfo veld van de opgeslagen digitale handtekening. De <KeyName> elementen <KeyValue> worden niet verwerkt als onderdeel van handtekeningvalidatie en zijn daarom niet beveiligd tegen wijziging. Toepassingen mogen geen aanname doen met betrekking tot de geldigheid van deze twee elementen. Om niet-gedetecteerde wijzigingen en mogelijke verwarring te voorkomen, moeten toepassingen de InCertificatePart optie gebruiken in plaats van InSignaturePart. De InCertificatePart optie biedt of maakt deze niet beschikbaar <KeyName> of <KeyValue>.