How To Encrypt Element in ASP.NET Web Configuration File

Posted at : Sep/06/2010
4034 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
9023
Input code above below (Case Sensitive) :

ABOUT ME

Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Founder & IT Trainer Native Enterprise | MCT (2008-2019) | MVP (2009-2016) | Xamarin Certified Professional | MTA | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.

[Read More...]

TOP DOWNLOAD

Mapping Hak Akses User Pada MenuStrip Sampai Control Button
downloaded 6982 times

Bagaimana caranya menginstal database ketika deploying sebuah aplikasi?
downloaded 4893 times

Simple Voice Engine Application With Sound Player Class...
downloaded 4045 times

Change Group,Sort Order, Filtering By Date in Crystal Reports
downloaded 3460 times

WinForms DataGrid Paging With SqlDataAdapter
downloaded 2881 times


LINKS

CERTIFICATIONS

Xamarin Certified
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench

NATIVE ENTERPRISE

Native Enterprise - IT Training

FOLLOW ME

Youtube  Facebook  Instagram  LinkedIn   Twitter

RSS


NATIVE ENTERPRISE NEWS

© Copyright 2006 - 2024   Rully Yulian MF   All rights reserved.