CDOSYS/CDOEX kullanarak nasıl gönderileceği dijital olarak imzalanmış iletiler

Makale çevirileri Makale çevirileri
Makale numarası: 280391 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Microsoft birlikte çalışma veri nesneleri için Windows 2000 (CDOSYS) ve Exchange 2000 (CDOEX) için Microsoft birlikte çalışma Veri Nesneleri'ndeki doğrudan dijital olarak imzalamak veya bir iletiyi şifrelemek için bir yol sağlamaz. Uygulama programlama arabirimi (API), geçerli bir imza oluşturmak için herhangi bir işlevsellik göstermiyor. Ancak, şifreleme APı'SI CDOSYS veya CDOEX birlikte ve/dijital olarak imzalamak veya bir iletiyi şifrelemek için kullanabilirsiniz.

Daha fazla bilgi

COM sürüm şifreleme API (CAPICOM), ve/kolayca oturum açmak veya CDOSYS veya CDOEX iletileri şifrelemek için kullanabilirsiniz. CAPICOM DLL aşağıdaki Microsoft'tan elde "Platform SDK Yeniden Dağıtılabiliri: CAPICOM 1.0A" Web sitesi:
http://www.microsoft.com/downloads/details.aspx?FamilyID=860ee43a-a843-462f-abb5-ff88ea5896f6&DisplayLang=en

Bir iletiyi dijital olarak imzalamak

  1. CDOSYS veya CDOEX IMessage nesnesi ile başlatın. Bu ileti, gönderenin, alıcının, konu, gövde, ekleri ve gereken diğer maddeler ile yapılandırın.
  2. Yeni bir IMessage nesnesi oluşturun. Bu yeni iletinin IDatasource::OpenObject yöntemini kullanarak, varolan iletiyi 1. adımdaki açın.
  3. Yeni IMessage nesnenin IBodyPart kök alın ve sonra da aşağıdaki özellikleri ayarlayın:
    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. Yeni IMessage nesnenin içeriğini imzalamakta CAPICOM Imzacı nesne ve gönderenin sertifikası'nı kullanın.
  5. Yeni bir ileti göndermek ve sonra özgün iletinin atın.

Bir iletiyi şifrelerken

  1. CDOSYS veya CDOEX IMessage nesnesi ile başlatın. Bu ileti, gönderenin, alıcının, konu, gövde, ekleri ve gereken diğer maddeler ile yapılandırın.
  2. Yeni bir IMessage nesnesi oluşturun. Bu yeni iletinin IDatasource::OpenObject yöntemini kullanarak, varolan iletiyi 1. adımdaki açın.
  3. Yeni IMessage nesnenin IBodyPart kök alın ve sonra da aşağıdaki özellikleri ayarlayın:
    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. CAPICOM EnvelopedData nesne ve alıcının sertifika yeni IMessage nesnenin içeriğini şifrelemek için kullanın.
  5. Yeni bir ileti göndermek ve özgün atın.

Dijital olarak imzalama ve bir iletiyi şifrelerken

Adımlar aynıdır, ancak sırası önemlidir. Ilk iletiyi imzalamak ve sonra da iletiyi şifrelemek gerekir.

Örnek kod

Örnek kod ile ilgili notlar

  • Örnek, iki varolmayan işlevleri GetCertForSignature ve GetCertForEnvelope çağırır. Programcı, uygun sertifika edinmelisiniz.
  • Örnek kod, CAPICOM 1.0 tür kitaplığı, Microsoft ActiveX Data Objects 2.5 kitaplığı ve uygun CDO kitaplığı başvurular gerektirir.
'******************************************************************
'
' 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
				

Özellikler

Makale numarası: 280391 - Last Review: 25 Ekim 2007 Perşembe - Gözden geçirme: 4.5
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Exchange Server 2003 Enterprise Edition
  • Microsoft Exchange Server 2003 Standard Edition
  • Microsoft Exchange 2000 Server Standard Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows XP Professional Edition
  • Microsoft Windows XP Home Edition
  • Collaboration Data Objects for Exchange 2000
  • Microsoft Collaboration Data Objects 2.0
Anahtar Kelimeler: 
kbmt kbenv kbhowto kbmsg KB280391 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:280391

Geri Bildirim Ver

 

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