How To Encrypt Element in ASP.NET Web Configuration File

.NET Framework , Posted at : Sep/06/2010  
3083 Views   2 Comments

File web.config merupakan file yang digunakan untuk mengatur setting-setting yang berhubungan dengan asp.net web yang digunakan seperti misalnya connection string, custom error, tracing, debugging, referensi terhadap assembly yang digunakan, dan lain-lain. Kegunaan lainnya yaitu merupakan tempat penyimpanan setting smtp yang digunakan dalam asp.net web mail. Setting smtp tersebut menyimpan informasi yang sifatnya security sensitive yaitu user name dan password, begitu juga dengan penggunaan connection string yang menyimpan informasi authentikasi terhadap database yang digunakan.

Bagaimana caranya agar informasi yang disimpan di file web.config yang sifatnya secure tidak dapat langsung dibaca? Kita dapat melakukannya dengan mengenkripsi elemen yang kita inginkan seperti misalnya elemen connectionStrings, elemen appSettings dan elemen mailSettings. Tekniknya mudah sekali, mari kita lakukan langkah-langkah berikut ini (tools yang saya gunakan yaitu Visual Studio 2010 dan VB 2010) :

1. Buat sebuah asp.net web project template.

2. Design UI di web form seperti berikut ini didalam HTML nya :

    <div>
        Encrypt Web Config Element :<br />
        <asp:CheckBoxList ID="CheckBoxList1" runat="server">
        </asp:CheckBoxList>
        <br />
        <asp:Button ID="Button1" runat="server" Text="Encrypt / Decrypt" />
        <br />
        <br />
        <asp:Label ID="lblInfo" runat="server"></asp:Label>
        <br />
    
    </div>

3. Tambahkan elemen berikut ini di file web.config (diantara elemen configuration) :

  <system.net>
    <mailSettings>
      <smtp deliveryMethod="Network" from="Rully Yulian MF &lt; rully@yulianmf.com &gt;">
        <network defaultCredentials="false" host="smtp.gmail.com" password="rahasia_dong"
          port="587" userName="rully@yulianmf.com" enableSsl="true" />
      </smtp>
    </mailSettings>
  </system.net>

  <appSettings>
    <add key="userName" value="Rully" />
    <add key="password" value="rahasia" />
  </appSettings>
  
  <connectionStrings>
    <clear />
    <add name="LocalSqlServer" 
         connectionString="data source=.\SQL2008;uid=sa;pwd=sql2008;initial catalog=aspnetdb"
         providerName="System.Data.SqlClient" />
  </connectionStrings>

4. Ketikkan kode berikut ini untuk menampilkan list element web.config yang akan di enkripsi (tentunya kita dapat melakukan enkripsi pada element web.config lainnya) :

    Protected Sub Page_Load() Handles Me.Load
        If Not IsPostBack Then
            CheckBoxList1.Items.AddRange(
                New ListItem() {
                        New ListItem With {.Text = "Connection Strings",
                                           .Value = "connectionStrings"},
                        New ListItem With {.Text = "App Settings",
                                           .Value = "appSettings"},
                        New ListItem With {.Text = "Smtp Mail Settings",
                                           .Value = "system.net/mailSettings/smtp"}
                        })
        End If
    End Sub

5. Tambahkan prosedur berikut ini yang digunakan untuk melakukan enkripsi pada element web.config. .NET framework menyediakan dua provider library untuk melakukan enkripsi yaitu DataProtectionConfigurationProvider dan RSAProtectedConfigurationProvider (default). List kedua provider tersebut dapat anda lihat di file machine.config sesuai dengan versi .NET framework yang digunakan (C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config) :

    Private Sub EncryptElement(ByVal pathElement As String,
                               ByVal Encrypted As Boolean)

        Dim config = WebConfigurationManager.OpenWebConfiguration("~")
        Dim theSection = config.GetSection(pathElement)

        If (Encrypted) Then
            If Not theSection.SectionInformation.IsProtected Then

                'theSection.SectionInformation.ProtectSection(
                '    "DataProtectionConfigurationProvider")

                theSection.SectionInformation.ProtectSection(Nothing)
            End If
        Else
            If theSection.SectionInformation.IsProtected Then
                theSection.SectionInformation.UnprotectSection()
            End If
        End If
        config.Save()

    End Sub

Apabila kita ingin menggunakan RSAProtectedConfigurationProvider maka cukup memberikan nilai Nothing sebaga input parameter pada method ProtectSection.

6. Tambahkan event handler berikut pada button yang telah dibuat diatas :

    Protected Sub Button1_Click() Handles Button1.Click
        Dim itemList = CheckBoxList1.Items
        Dim item As ListItem

        For Each item In itemList
            EncryptElement(item.Value, item.Selected)
        Next

        lblInfo.Text = "Encrypt / Decrypt Successfully"
    End Sub

7. Jalankan asp.net web site tersebut dan pilih element-element yang diinginkan untuk di enkripsi dari checkbox list control. Anda dapat melihat hasilnya seperti pada gambar dibawah ini (tentunya untuk membaca element tersebut dari program kita tidak perlu untuk mendekripsi terlebih dahulu kecuali apabila terjadi perubahan value pada element yang bersangkutan) :

Selamat mencoba.


[Comments]
Antonius Pungkas  Oct/05/2010 10:10:51 :

Artikel yang luar biasa... emang yang saya cari... thx ya...

Tp sebelumnya saya ada pertanyaan nih, artikel diatas kan untuk meng-encrypt dan men-decrypt web.config, ketika web kita deploy dengan web.config yang telah ter-encrypt, apakah mungkin iis bisa membaca web.config yang sudah ter-encrypt? atau ada cara sendiri dari iis-nya untuk mengenali kata-kata yang terencrypt...

terima kasih sebelumnya 

Rully  Oct/05/2010 11:20:01 :

Antonius > Terima kasih mas...sebelum di deploy sebaiknya belum kita encrypt, baru setelah di deploy element yang terdapat di web.config tersebut di encrypt dengan cara seperti di atas.


[Write your comment]
Name (required)
Email (required-will not published)
 
Comment

FCVD
Input code above below (Case Sensitive) :
About Me 
Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Microsoft Certified Trainer | IT Trainer at Native Enterprise | IT Consultant | Software Developer | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.
[Read More...]
Top Download 
Mapping Hak Akses User Pada MenuStrip Sampai Control Button : Downloaded 6083 times  
Bagaimana caranya menginstal database ketika deploying sebuah aplikasi? : Downloaded 4689 times  
Simple Voice Engine Application With Sound Player Class... : Downloaded 3554 times  
Change Group,Sort Order, Filtering By Date in Crystal Reports : Downloaded 3324 times  
WinForms DataGrid Paging With SqlDataAdapter : Downloaded 2706 times  
Links 
Certifications 
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench
Native Enterprise 
Follow Me 
Facebook   LinkedIn   Twitter
Syndication 
Hosted By 
Native Enterprise News 
© Copyright 2006-2016   Rully Yulian MF   All rights reserved.