Bagikan melalui


MessageProtectionOrder Enum

Definisi

Menentukan urutan operasi yang melindungi pesan.

public enum class MessageProtectionOrder
public enum MessageProtectionOrder
type MessageProtectionOrder = 
Public Enum MessageProtectionOrder
Warisan
MessageProtectionOrder

Bidang

Nama Nilai Deskripsi
SignBeforeEncrypt 0

Menentukan bahwa tanda tangan digital dihasilkan untuk pesan SOAP sebelum bagian mana pun dari pesan SOAP dienkripsi, tetapi tanda tangan digital tidak dienkripsi.

SignBeforeEncryptAndEncryptSignature 1

Menentukan bahwa tanda tangan digital dihasilkan untuk pesan SOAP sebelum bagian mana pun dari pesan SOAP dienkripsi, dan tanda tangan digital dienkripsi.

EncryptBeforeSign 2

Menentukan bahwa pesan SOAP dienkripsi sebelum tanda tangan digital dihasilkan untuk pesan SOAP.

Contoh

Contoh berikut membuat SymmetricSecurityBindingElement elemen dan mengatur propertinya MessageProtectionOrder ke SignBeforeEncrypt.

public static Binding CreateCustomBinding()
{
    // Create an empty BindingElementCollection to populate,
    // then create a custom binding from it.
    BindingElementCollection outputBec = new BindingElementCollection();

    // Create a SymmetricSecurityBindingElement.
    SymmetricSecurityBindingElement ssbe =
        new SymmetricSecurityBindingElement();

    // Set the algorithm suite to one that uses 128-bit keys.
    ssbe.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic128;

       // Set MessageProtectionOrder to SignBeforeEncrypt.
    ssbe.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt;

    // Use a Kerberos token as the protection token.
    ssbe.ProtectionTokenParameters = new KerberosSecurityTokenParameters();

    // Add the SymmetricSecurityBindingElement to the BindingElementCollection.
    outputBec.Add ( ssbe );
    outputBec.Add(new TextMessageEncodingBindingElement());
    outputBec.Add(new HttpTransportBindingElement());

    // Create a CustomBinding and return it; otherwise, return null.
    return new CustomBinding(outputBec);
}
Public Shared Function CreateCustomBinding() As Binding 
    ' Create an empty BindingElementCollection to populate, 
    ' then create a custom binding from it.
    Dim outputBec As New BindingElementCollection()
    
    ' Create a SymmetricSecurityBindingElement.
    Dim ssbe As New SymmetricSecurityBindingElement()
    
    ' Set the algorithm suite to one that uses 128-bit keys.
    ssbe.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic128
    
    ' Set MessageProtectionOrder to SignBeforeEncrypt.
    ssbe.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt
    
    ' Use a Kerberos token as the protection token.
    ssbe.ProtectionTokenParameters = New KerberosSecurityTokenParameters()
    
    ' Add the SymmetricSecurityBindingElement to the BindingElementCollection.
    outputBec.Add(ssbe)
    outputBec.Add(New TextMessageEncodingBindingElement())
    outputBec.Add(New HttpTransportBindingElement())
    
    ' Create a CustomBinding and return it; otherwise, return null.
    Return New CustomBinding(outputBec)

End Function

Keterangan

Enumerasi ini digunakan dengan AsymmetricSecurityBindingElement.MessageProtectionOrder properti AsymmetricSecurityBindingElement dan SymmetricSecurityBindingElement.MessageProtectionOrder properti kelas SymmetricSecurityBindingElement .

Jika pesan rentan terhadap serangan hash (misalnya, jika pesan pendek atau entropi rendah), Anda harus menggunakan opsi SignBeforeEncryptAndEncryptSignature atau EncryptBeforeSign. (Entropi adalah data acak yang disediakan oleh server, klien, atau keduanya, dan digunakan untuk membuat kunci bersama untuk mengenkripsi dan mendekripsi data.)

Apa yang Dipesan?

WCF menawarkan tiga tingkat perlindungan berbeda yang menentukan bagaimana pesan diamankan menggunakan keamanan pesan SOAP. Defaultnya adalah SignBeforeEncryptAndEncryptSignature. Pengaturan ini pertama-tama menandatangani pesan, mengenkripsi isi pesan, lalu mengenkripsi tanda tangan XML. Ini mengurangi kemungkinan serangan tebakan kriptografi yang berhasil terhadap tanda tangan.

Namun, menggunakan default memiliki implikasi performa. Akibatnya, ada tradeoff performa untuk peningkatan keamanan. Mengenkripsi tanda tangan dapat mengurangi performa antara 10 persen dan 40 persen. Jika konten data pesan bernilai rendah, dan throughput performa lebih signifikan, gunakan SignBeforeEncrypt. Dengan pengaturan ini, hash tanda tangan dikirim dalam teks yang jelas, dan dengan demikian pesan lebih rentan terhadap serangan tebakan dan verifikasi pada entropi rendah.

Pengikatan Kustom Saja

Untuk mengubah MessageProtectionOrder properti memerlukan pembuatan pengikatan keamanan kustom. Untuk informasi selengkapnya tentang membuat pengikatan kustom, lihat Membuat pengikatan User-Defined. Untuk informasi selengkapnya tentang membuat pengikatan kustom untuk mode autentikasi tertentu, lihat Cara: Membuat SecurityBindingElement untuk Mode Autentikasi Tertentu.

Berlaku untuk

Lihat juga