Menandatangani Dokumen
Topik ini menjelaskan cara menandatangani dokumen XPS.
Sebelum menggunakan contoh kode berikut dalam program Anda, baca penafian di Tugas Pemrograman Tanda Tangan Digital Umum.
Untuk menandatangani dokumen XPS, muat terlebih dahulu ke manajer tanda tangan seperti yang dijelaskan dalam Menginisialisasi Signature Manager.
Untuk menandatangani dokumen yang telah dimuat ke manajer tanda tangan:
- Membuat instans antarmuka IXpsSigningOptions .
- Atur kebijakan penandatanganan.
- Atur metode tanda tangan. Konstanta string URI metode tanda tangan ditentukan dalam cryptxml.h. Untuk informasi selengkapnya tentang nilai metode tanda tangan yang valid, lihat IXpsSigningOptions::SetSignatureMethod.
- Atur metode hash. Konstanta string URI metode hash ditentukan dalam cryptxml.h. Untuk informasi tentang nilai metode hash yang valid, lihat IXpsSigningOptions::SetDigestMethod.
- Muat sertifikat seperti yang dijelaskan dalam Memuat Sertifikat Dari File.
- Verifikasi bahwa sertifikat mendukung metode tanda tangan, seperti yang dijelaskan dalam Memverifikasi Bahwa Sertifikat Mendukung Metode Tanda Tangan.
- Verifikasi bahwa metode hash didukung oleh sistem, seperti yang dijelaskan dalam Memverifikasi Sistem Mendukung Metode Hash.
- Jika diperlukan, sematkan sertifikat rantai kepercayaan sertifikat dalam dokumen XPS seperti yang dijelaskan dalam Embed Certificate Chains dalam Dokumen.
- Tanda tangani dokumen XPS.
Contoh kode berikut mengilustrasikan cara menggunakan langkah-langkah sebelumnya dalam program.
// this example requires:
// cryptxml.h
// and refers to local methods that are described
// in other topics
HRESULT hr = S_OK;
BOOL supported = FALSE;
BOOL succeeded = FALSE;
IXpsSigningOptions *signingOptions = NULL;
IXpsSignature *signature = NULL;
PCCERT_CONTEXT certificate = NULL;
// Instantiate an IXpsSigningOptions interface.
hr = signatureManager->CreateSigningOptions (&signingOptions);
if (SUCCEEDED(hr)) {
// Set the signing policy to indicate the document parts
// to sign.
hr = signingOptions->SetPolicy (XPS_SIGN_POLICY_CORE_PROPERTIES);
}
if (SUCCEEDED(hr)) {
// Set the digital signature method to use to generate the
// signature hash value.
//
// The signature method used in this example is
// defined in cryptxml.h.
hr = signingOptions->SetSignatureMethod (
wszURI_XMLNS_DIGSIG_RSA_SHA1);
}
if (SUCCEEDED(hr)) {
// Set the digest method to use.
//
// The digest method used in this example is
// defined in cryptxml.h.
hr = signingOptions->SetDigestMethod (wszURI_XMLNS_DIGSIG_SHA1);
}
if (SUCCEEDED(hr)) {
// Load a certificate from a certificate file
hr = LoadCertificateFromFile (signingCertificate, &certificate);
}
if (SUCCEEDED(hr)) {
// Verify the certificate supports the digest method
supported = SupportsDigestAlgorithm (
wszURI_XMLNS_DIGSIG_SHA1);
if (!supported) hr = E_FAIL;
}
if (SUCCEEDED(hr)) {
// Verify the signature method is supported by the certificate
// and the system
supported = SupportsSignatureAlgorithm(
wszURI_XMLNS_DIGSIG_RSA_SHA1, certificate);
if (!supported) hr = E_FAIL;
}
if (SUCCEEDED(hr)) {
// Embed the certificate trust chain in the XPS package (optional).
hr = EmbedCertificateChainInXpsPackage (signingOptions, certificate);
}
if (SUCCEEDED(hr)) {
// Sign the XPS document
hr = signatureManager->Sign (signingOptions, certificate, &signature);
}
//<Free the certificate context
if (NULL != certificate) CertFreeCertificateContext (certificate);
if (NULL != signingOptions) signingOptions->Release();
if (NULL != signature) signature->Release();
Topik terkait
-
Langkah berikutnya
-
Digunakan di Bagian Ini
-
Untuk Informasi Selengkapnya
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk