Bagaimana mengirimkan digital ditandatangani pesan dengan menggunakan CDOSYS/CDOEX

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 280391 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Microsoft kolaborasi Data objek untuk Windows 2000 (CDOSYS) dan Microsoft kolaborasi Data objek untuk Exchange 2000 (CDOEX) tidak langsung memberikan cara untuk secara digital menandatangani atau mengenkripsi pesan. Antarmuka pemrograman aplikasi (API) tidak mengekspos fungsi untuk menghasilkan tanda yang berlaku. Namun, Anda dapat menggunakan kriptografi API dalam kombinasi dengan CDOSYS atau CDOEX untuk digital menandatangani dan/atau mengenkripsi pesan.

INFORMASI LEBIH LANJUT

Anda dapat menggunakan versi COM kriptografi API (CAPICOM) untuk dengan mudah masuk dan/atau mengenkripsi pesan CDOSYS atau CDOEX. Anda dapat memperoleh CAPICOM DLL dari Microsoft berikut "Platform SDK Redistributable: CAPICOM 1.0a" situs Web:
http://www.Microsoft.com/downloads/details.aspx?FamilyID = 860ee43a-a843-462f-abb5-ff88ea5896f6 & DisplayLang = en

Dengaan signing pesan

  1. Mulai dengan CDOSYS atau CDOEX IMessage objek. Mengkonfigurasi pesan ini dengan pengirim, penerima, subjek, tubuh, lampiran, dan item lainnya yang diperlukan.
  2. Buat objek IMessage baru. Buka pesan yang ada dari langkah 1 dengan menggunakan metode IDatasource::OpenObject pesan baru ini.
  3. Dapatkan objek IMessage baru IBodyPart akar, dan kemudian menetapkan properti berikut:
    oBodyPart.ContentMediaType = "application/pkcs7-mime;smime-type=signed-data;name=""smime.p7m"""
    oBodyPart.ContentTransferEncoding = "base64"
    oBodyPart.Fields("urn:schemas:mailheader:content-disposition") = "attachment;FileName=""smime.p7m"""
    oBodyPart.Fields.Update
    					
  4. Menggunakan objek CAPICOM penandatangan dan pengirim sertifikat untuk menandatangani konten objek IMessage baru.
  5. Kirim pesan baru, dan kemudian membuang pesan awal.

Enkripsi pesan

  1. Mulai dengan CDOSYS atau CDOEX IMessage objek. Mengkonfigurasi pesan ini dengan pengirim, penerima, subjek, tubuh, lampiran, dan item lainnya yang diperlukan.
  2. Buat objek IMessage baru. Buka pesan yang ada dari langkah 1 dengan menggunakan metode IDatasource::OpenObject pesan baru ini.
  3. Dapatkan objek IMessage baru IBodyPart akar, dan kemudian menetapkan properti berikut:
    oBodyPart.ContentMediaType = "application/pkcs7-mime;smime-type=enveloped-data;name=smime.p7m;"
    oBodyPart.ContentTransferEncoding = "base64"
    oBodyPart.Fields("urn:schemas:mailheader:content-disposition") = "attachment;FileName=""smime.p7m"""
    oBodyPart.Fields.Update
    					
  4. Menggunakan objek CAPICOM EnvelopedData dan penerima sertifikat untuk mengenkripsi konten objek IMessage baru.
  5. Kirim pesan baru, dan membuang asli.

Dengaan signing dan enkripsi pesan

Langkah-langkah yang sama, tetapi urutan penting. Anda harus pertama-tama daftarkan pesan, dan kemudian mengenkripsi pesan.

Kode sampel

Catatan tentang kode contoh

  • Sampel panggilan dua tidak ada fungsi GetCertForSignature dan GetCertForEnvelope. Pemrogram harus mendapatkan sertifikat yang sesuai.
  • Contoh kode memerlukan referensi ke perpustakaan jenis 1.0 CAPICOM, Microsoft perpustakaan objek Data ActiveX 2,5, dan perpustakaan CDO yang sesuai.
'******************************************************************
'
' SignMessage
'
' Takes oMsg as input (non-secure message) and returns a new
' message that is digitally signed.
'
'******************************************************************
Public Function SignMessage(oMsg As CDO.Message) As CDO.Message
    Dim oSecMsg As New CDO.Message
    Dim oBodyPart As CDO.IBodyPart
    Dim oSignedData As New CAPICOM.SignedData
    Dim strData As String
    Dim strContent As String
    Dim oStream As ADODB.Stream
    Dim oSigner As New CAPICOM.Signer
    Dim oCert As CAPICOM.Certificate
    Dim oAttr As New CAPICOM.Attribute
    Dim byteData() As Byte
    
    On Error GoTo handle_error
    
    ' Copy input into output message
    oSecMsg.DataSource.OpenObject oMsg, cdoIMessage
    
    ' Set up main bodypart
    Set oBodyPart = oSecMsg.BodyPart
    oBodyPart.ContentMediaType = "application/pkcs7-mime;smime-type=signed-data;name=""smime.p7m"""
    oBodyPart.ContentTransferEncoding = "base64"
    oBodyPart.Fields("urn:schemas:mailheader:content-disposition") = "attachment;FileName=""smime.p7m"""
    oBodyPart.Fields.Update
            
    ' Get certificate
    Set oCert = GetCertForSignature(oSecMsg.From)
    
    ' If no cert, throw an error and exit
    If oCert Is Nothing Then
        MsgBox "No valid certificate found for sender.", , "Error"
        Set SignMessage = Nothing
    End If
    
    ' Add cert to signer object
    oSigner.Certificate = oCert
    
    ' Add signing time attribute to signer object
    oAttr.Name = CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME
    oAttr.Value = Now
    oSigner.AuthenticatedAttributes.Add oAttr

    ' Sign the content (root bodypart)
    strContent = oMsg.BodyPart.GetStream.ReadText
    oSignedData.Content = StrConv(strContent, vbFromUnicode)

    strData = oSignedData.Sign(oSigner, False, CAPICOM_ENCODE_BINARY)

    ' Write the cms blob into the main bodypart
    ' let CDO do the base64 encoding
    Set oStream = oSecMsg.BodyPart.GetDecodedContentStream
    
    oStream.Type = adTypeBinary

    ' Get the string data as a byte array
    byteData = strData
    
    ' Write the data to the stream and flush it
    oStream.Write byteData
    oStream.Flush
    
    GoTo cleanup
    
    ' Report error
handle_error:
    MsgBox Err.Number & ": " & Err.Description, , "Error:"
    Set oSecMsg = Nothing
    
    ' Clean up memory
cleanup:
    Set oBodyPart = Nothing
    Set oSignedData = Nothing
    Set oStream = Nothing
    Set oSigner = Nothing
    Set oCert = Nothing
    Set oAttr = Nothing
    
    ' Return new message
    Set SignMessage = oSecMsg
End Function

'******************************************************************
'
' EnvelopeMessage
'
' Takes oMsg as input (non-secure message) and returns a new
' message that is enveloped.
'
'******************************************************************
Public Function EnvelopeMessage(oMsg As CDO.Message, iCertStore As Integer, Optional strQuery As String) As CDO.Message
    Dim oSecMsg As New CDO.Message
    Dim oBodyPart As CDO.IBodyPart
    Dim oEnvelopedData As New CAPICOM.EnvelopedData
    Dim oCert As CAPICOM.Certificate
    Dim oStream As ADODB.Stream
    Dim strData As String
    Dim strContent As String
    Dim byteData() As Byte
    
    ' Copy input into output message
    oSecMsg.DataSource.OpenObject oMsg, cdoIMessage
    
    ' Set up main bodypart
    Set oBodyPart = oSecMsg.BodyPart
    oBodyPart.ContentMediaType = "application/pkcs7-mime;smime-type=enveloped-data;name=smime.p7m;"

    oBodyPart.ContentTransferEncoding = "base64"
    oBodyPart.Fields("urn:schemas:mailheader:content-disposition") = "attachment;FileName=""smime.p7m"""
    oBodyPart.Fields.Update
    
    ' Get recipient's cert
    If strQuery = "" Then
        Set oCert = GetCertForEnvelope(oSecMsg.To, iCertStore)
    Else
        Set oCert = GetCertForEnvelope(oSecMsg.To, iCertStore, strQuery)
    End If
    
    oEnvelopedData.Recipients.Add oCert
    
    ' Encrypt content
    strContent = oMsg.BodyPart.GetStream.ReadText
    oEnvelopedData.Content = StrConv(strContent, vbFromUnicode)
    strData = oEnvelopedData.Encrypt(CAPICOM_ENCODE_BINARY)
    
    ' Write the CMS blob into the main bodypart
    ' let CDO do the base64 encoding
    Set oStream = oSecMsg.BodyPart.GetDecodedContentStream
    
    oStream.Type = adTypeBinary
    
    ' Get the string data as a byte array
    byteData = strData
    
    ' Write the data to the stream and flush it
    oStream.Write byteData
    oStream.Flush
    
    GoTo cleanup
    
handle_error:
    MsgBox Err.Number & ": " & Err.Description, , "Error:"
    Set oSecMsg = Nothing
    
    ' Clean up memory
cleanup:
    Set oBodyPart = Nothing
    Set oEnvelopedData = Nothing
    Set oStream = Nothing
    Set oCert = Nothing
    
    ' Return new message
    Set EnvelopeMessage = oSecMsg
End Function
				

Properti

ID Artikel: 280391 - Kajian Terakhir: 23 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Exchange Server 2003 Enterprise Edition
  • Microsoft Exchange Server 2003 Standard Edition
  • Microsoft Exchange 2000 Server Standard Edition
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition
Kata kunci: 
kbenv kbhowto kbmsg kbmt KB280391 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:280391

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com