CertificateEmbeddingOption Enum
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menentukan lokasi tempat sertifikat X.509 yang digunakan dalam penandatanganan disimpan.
public enum class CertificateEmbeddingOption
public enum CertificateEmbeddingOption
type CertificateEmbeddingOption =
Public Enum CertificateEmbeddingOption
- Warisan
Bidang
InCertificatePart | 0 | Sertifikat disematkan dalam sertifikatnya sendiri PackagePart. |
InSignaturePart | 1 | Sertifikat disematkan dalam SignaturePart yang dibuat untuk tanda tangan yang ditambahkan. |
NotEmbedded | 2 | Sertifikat dalam tidak disematkan dalam paket. |
Contoh
Contoh berikut menunjukkan cara menggunakan CertificateEmbeddingOption
untuk mengatur PackageDigitalSignatureManager.CertificateOption properti .
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()
Keterangan
Jika sertifikat ada NotEmbedded
dalam paket, aplikasi yang memverifikasi tanda tangan harus menyediakan salinan sertifikat untuk memverifikasi tanda tangan yang ditandatangani olehnya.
InSignaturePart
menambahkan dua elemen informasi, <KeyName>
dan <KeyValue>
, sebagai bagian KeyInfo dari bidang tanda tangan digital yang disimpan. Elemen <KeyName>
dan <KeyValue>
tidak diproses sebagai bagian dari validasi tanda tangan dan karenanya tidak aman dari modifikasi. Aplikasi tidak boleh membuat asumsi mengenai validitas kedua elemen ini. Untuk menghindari modifikasi yang tidak terdeteksi dan kemungkinan kebingungan InCertificatePart
, aplikasi harus menggunakan opsi alih-alih InSignaturePart
. Opsi InCertificatePart
tidak menyediakan atau mengekspos baik <KeyName>
atau <KeyValue>
.