Sdílet prostřednictvím


Ochrana připojovacích řetězců a dalších konfiguračních údajů (C#)

Scott Mitchell

Stáhnout PDF

Aplikace ASP.NET obvykle ukládá informace o konfiguraci do souboru Web.config. Některé z těchto informací jsou citlivé a vyžadují ochranu. Ve výchozím nastavení nebude tento soubor obsluhován návštěvníkovi webu, ale správce nebo hacker může získat přístup k systému souborů webového serveru a zobrazit obsah souboru. V tomto kurzu zjistíme, že ASP.NET 2.0 nám umožňuje chránit citlivé informace šifrováním oddílů Web.config souboru.

Úvod

Informace o konfiguraci pro ASP.NET aplikace se běžně ukládají do souboru XML s názvem Web.config. V průběhu těchto kurzů jsme několikkrát aktualizovali Web.config . Například při vytváření Northwind typed dataSet v prvním kurzu se do oddílu <connectionStrings> automaticky přidaly Web.config informace o připojovací řetězec. Později jsme v kurzu Stránky předlohy a Navigace na webu ručně aktualizovali Web.configa přidali <pages> prvek označující, že všechny ASP.NET stránky v našem projektu by měly používat DataWebControls motiv.

Vzhledem k tomu Web.config , že mohou obsahovat citlivá data, jako jsou připojovací řetězce, je důležité, aby byl obsah Web.config uchován v bezpečí a skrytý před neoprávněnými diváky. Ve výchozím nastavení všechny požadavky HTTP na soubor s .config příponou zpracovává modul ASP.NET, který vrátí zprávu Tento typ stránky není obsluhován zobrazenou na obrázku 1. To znamená, že návštěvníci nemohou zobrazit obsah souboru Web.config jednoduše zadáním http://www.YourServer.com/Web.config do adresního řádku prohlížeče.

Při návštěvě Web.config prostřednictvím prohlížeče se vrátí zpráva Tento typ stránky se neobsloužil.

Obrázek 1: Návštěva Web.config prostřednictvím prohlížeče vrátí zprávu Tento typ stránky se neobslouží Zpráva (kliknutím zobrazíte obrázek v plné velikosti).

Ale co když útočník najde nějaké jiné zneužití, které mu umožní zobrazit obsah vašeho Web.config souboru? Co by mohl útočník s touto informací dělat a jaké kroky je možné provést k další ochraně citlivých informací v rámci Web.config? Většina oddílů v Web.config souboru naštěstí citlivé informace neobsahuje. Jakou škodu může útočník způsobit, když zná název výchozího motivu používaného vašimi ASP.NET stránkami?

Některé Web.config části ale obsahují citlivé informace, které můžou zahrnovat připojovací řetězce, uživatelská jména, hesla, názvy serverů, šifrovací klíče atd. Tyto informace se obvykle nacházejí v následujících Web.config částech:

  • <appSettings>
  • <connectionStrings>
  • <identity>
  • <sessionState>

V tomto kurzu se podíváme na techniky ochrany takových citlivých informací o konfiguraci. Jak uvidíme, rozhraní .NET Framework verze 2.0 obsahuje systém chráněných konfigurací, který programově šifruje a dešifruje vybrané konfigurační oddíly.

Poznámka

Tento kurz končí tím, že se podíváte na doporučení Microsoftu pro připojení k databázi z ASP.NET aplikace. Kromě šifrování připojovacích řetězců můžete pomoct posílit zabezpečení systému tím, že zajistíte, že se k databázi připojujete zabezpečeným způsobem.

Krok 1: Prozkoumání možností chráněné konfigurace ASP.NET 2.0

ASP.NET 2.0 obsahuje chráněný konfigurační systém pro šifrování a dešifrování konfiguračních informací. To zahrnuje metody v rozhraní .NET Framework, které lze použít k programovému šifrování nebo dešifrování konfiguračních informací. Chráněný konfigurační systém používá model zprostředkovatele, který vývojářům umožňuje zvolit, jaká kryptografická implementace se použije.

Rozhraní .NET Framework se dodává se dvěma zprostředkovateli chráněných konfigurací:

Vzhledem k tomu, že chráněný konfigurační systém implementuje vzor návrhu zprostředkovatele, je možné vytvořit vlastního chráněného zprostředkovatele konfigurace a připojit ho k aplikaci. Další informace o tomto procesu najdete v tématu Implementace zprostředkovatele chráněné konfigurace .

Zprostředkovatelé RSA a DPAPI používají klíče pro své rutiny šifrování a dešifrování a tyto klíče mohou být uloženy na úrovni počítače nebo uživatele. Klíče na úrovni počítače jsou ideální pro scénáře, kdy webová aplikace běží na vlastním vyhrazeném serveru nebo pokud je na serveru více aplikací, které potřebují sdílet šifrované informace. Klíče na úrovni uživatele jsou bezpečnější možností ve sdílených hostitelských prostředích, kde by ostatní aplikace na stejném serveru neměly mít možnost dešifrovat oddíly konfigurace chráněné vaší aplikací.

V tomto kurzu budeme v našich příkladech používat zprostředkovatele DPAPI a klíče na úrovni počítače. Konkrétně se podíváme na šifrování oddílu <connectionStrings> v Web.config, i když k šifrování většiny oddílů Web.config se dá použít chráněný konfigurační systém. Informace o používání klíčů na úrovni uživatele nebo použití poskytovatele RSA najdete v části Další materiály na konci tohoto kurzu.

Poznámka

Zprostředkovatelé RSAProtectedConfigurationProvider a DPAPIProtectedConfigurationProvider se registrují v machine.config souboru s názvy RsaProtectedConfigurationProvider zprostředkovatelů a DataProtectionConfigurationProvider. Při šifrování nebo dešifrování konfiguračních informací budeme muset místo skutečného názvu typu ( a ) zadat příslušný název zprostředkovatele (RsaProtectedConfigurationProviderRSAProtectedConfigurationProvider nebo DataProtectionConfigurationProviderDPAPIProtectedConfigurationProvider). Soubor najdete machine.config ve $WINDOWS$\Microsoft.NET\Framework\version\CONFIG složce .

Krok 2: Šifrování a dešifrování konfiguračních oddílů prostřednictvím kódu programu

Pomocí několika řádků kódu můžeme zašifrovat nebo dešifrovat konkrétní konfigurační oddíl pomocí zadaného zprostředkovatele. Kód, jak uvidíme za chvíli, jednoduše potřebuje programově odkazovat na příslušný oddíl konfigurace, volat metodu ProtectSection nebo UnprotectSection a pak voláním Save metody zachovat změny. Rozhraní .NET Framework navíc obsahuje užitečný nástroj příkazového řádku, který může šifrovat a dešifrovat informace o konfiguraci. Tento nástroj příkazového řádku prozkoumáme v kroku 3.

Pro ilustraci ochrany informací o konfiguraci prostřednictvím kódu programu vytvoříme ASP.NET stránku, která obsahuje tlačítka pro šifrování a dešifrování oddílu <connectionStrings> v Web.configsouboru .

Začněte otevřením EncryptingConfigSections.aspx stránky ve AdvancedDAL složce . Přetáhněte ovládací prvek TextBox z panelu nástrojů na Designer a nastavte jeho ID vlastnost na WebConfigContents, jeho TextMode vlastnost na MultiLinea Width vlastnosti a Rows na 95 % a 15. Tento ovládací prvek TextBox zobrazí obsah, Web.config což nám umožní rychle zjistit, jestli je obsah šifrovaný nebo ne. Samozřejmě, ve skutečné aplikaci byste nikdy nechtěli zobrazovat obsah .Web.config

Pod TextBox přidejte dva ovládací prvky Tlačítko s názvy EncryptConnStrings a DecryptConnStrings. Nastavte vlastnosti Text na Šifrovat připojovací řetězce a Dešifrovat připojovací řetězce .

V tomto okamžiku by vaše obrazovka měla vypadat podobně jako na obrázku 2.

Snímek obrazovky znázorňující otevření sady Visual Studio na stránce EncryptingConfigSections.aspx, která obsahuje nové textové pole a dva ovládací prvky Tlačítko

Obrázek 2: Přidání webových ovládacích prvků TextBox a Two Button na stránku (kliknutím zobrazíte obrázek v plné velikosti)

Dále musíme napsat kód, který při prvním načtení stránky načte a zobrazí obsah Web.config objektu WebConfigContents v textovém poli. Do třídy kódu na pozadí stránky přidejte následující kód. Tento kód přidá metodu s názvem DisplayWebConfig a zavolá ji z obslužné Page_Load rutiny události, když Page.IsPostBack je false:

protected void Page_Load(object sender, EventArgs e)
{
    // On the first page visit, call DisplayWebConfig method
    if (!Page.IsPostBack)
        DisplayWebConfig();
}
private void DisplayWebConfig()
{
    // Reads in the contents of Web.config and displays them in the TextBox
    StreamReader webConfigStream = 
        File.OpenText(Path.Combine(Request.PhysicalApplicationPath, "Web.config"));
    string configContents = webConfigStream.ReadToEnd();
    webConfigStream.Close();
    WebConfigContents.Text = configContents;
}

Metoda DisplayWebConfig používá File třídu k otevření souboru s Web.config aplikace, StreamReader třídu ke čtení obsahu do řetězce a Path třídu k vygenerování fyzické cesty k Web.config souboru. Všechny tyto tři třídy se nacházejí v System.IO oboru názvů . V důsledku toho budete muset přidat usingSystem.IO příkaz na začátek třídy kódu na pozadí nebo alternativně před tyto názvy tříd přidat předponu System.IO. .

Dále musíme přidat obslužné rutiny událostí pro dvě události ovládacích prvků Click Button a přidat potřebný kód pro šifrování a dešifrování oddílu <connectionStrings> pomocí klíče na úrovni počítače s zprostředkovatelem DPAPI. V Designer poklikejte na všechna tlačítka a přidejte obslužnou rutinu Click události do třídy code-behind a pak přidejte následující kód:

protected void EncryptConnStrings_Click(object sender, EventArgs e)
{
    // Get configuration information about Web.config
    Configuration config = 
        WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
    // Let's work with the <connectionStrings> section
    ConfigurationSection connectionStrings = config.GetSection("connectionStrings");
    if (connectionStrings != null)
        // Only encrypt the section if it is not already protected
        if (!connectionStrings.SectionInformation.IsProtected)
        {
            // Encrypt the <connectionStrings> section using the 
            // DataProtectionConfigurationProvider provider
            connectionStrings.SectionInformation.ProtectSection(
                "DataProtectionConfigurationProvider");
            config.Save();
            
            // Refresh the Web.config display
            DisplayWebConfig();
        }
}
protected void DecryptConnStrings_Click(object sender, EventArgs e)
{
    // Get configuration information about Web.config
    Configuration config = 
        WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
    // Let's work with the <connectionStrings> section
    ConfigurationSection connectionStrings = 
        config.GetSection("connectionStrings");
    if (connectionStrings != null)
        // Only decrypt the section if it is protected
        if (connectionStrings.SectionInformation.IsProtected)
        {
            // Decrypt the <connectionStrings> section
            connectionStrings.SectionInformation.UnprotectSection();
            config.Save();
            // Refresh the Web.config display
            DisplayWebConfig();
        }
}

Kód použitý v těchto dvou obslužných rutinách událostí je téměř identický. Oba začínají získáním informací o aktuálním souboru s Web.config aplikace prostřednictvím WebConfigurationManager metody třídy sOpenWebConfiguration. Tato metoda vrátí konfigurační soubor webu pro zadanou virtuální cestu. Dále se k oddílu Web.config file s <connectionStrings> přistupuje prostřednictvím Configuration metody třídy sGetSection(sectionName), která vrací ConfigurationSection objekt.

Objekt ConfigurationSection obsahuje SectionInformation vlastnost , která poskytuje další informace a funkce týkající se oddílu konfigurace. Jak ukazuje výše uvedený kód, můžeme zjistit, jestli je konfigurační oddíl zašifrovaný, kontrolou SectionInformation vlastnosti s IsProtected . Kromě toho může být oddíl šifrovaný nebo dešifrovaný prostřednictvím SectionInformation vlastností ProtectSection(provider) a UnprotectSection metod.

Metoda ProtectSection(provider) přijímá jako vstup řetězec, který určuje název chráněného zprostředkovatele konfigurace, který se má použít při šifrování. V obslužné rutině EncryptConnString události Button s předáme do ProtectSection(provider) metody DataProtectionConfigurationProvider, aby se použil zprostředkovatel DPAPI. Metoda UnprotectSection může určit zprostředkovatele, který byl použit k šifrování konfiguračního oddílu, a proto nevyžaduje žádné vstupní parametry.

Po volání ProtectSection(provider) metody nebo UnprotectSection je nutné zavolat metodu objektu Configuration sSave, aby se změny zachovaly. Jakmile jsou konfigurační informace zašifrovány nebo dešifrovány a změny uloženy, voláme k DisplayWebConfig načtení aktualizovaného Web.config obsahu do ovládacího prvku TextBox.

Jakmile zadáte výše uvedený kód, otestujte ho EncryptingConfigSections.aspx tak, že navštívíte stránku v prohlížeči. Nejprve byste měli vidět stránku se seznamem obsahu Web.config s oddílem <connectionStrings> zobrazeným ve formátu prostého textu (viz Obrázek 3).

Snímek obrazovky znázorňující EncryptingConfigSections.aspx stránku načtenou ve webovém prohlížeči

Obrázek 3: Přidání webových ovládacích prvků TextBox a Dvoutlačítko na stránku (kliknutím zobrazíte obrázek v plné velikosti)

Teď klikněte na tlačítko Šifrovat připojovací řetězce. Pokud je povoleno ověření požadavku, kód vystavený zpět z Textového WebConfigContentsHttpRequestValidationExceptionpole vytvoří , který zobrazí zprávu, že klient zjistil potenciálně nebezpečnou Request.Form hodnotu. Ověření požadavku, které je ve výchozím nastavení povolené v ASP.NET 2.0, zakazuje zpětné odeslání, které obsahuje nezakódovaný kód HTML, a je navržené tak, aby pomáhalo předcházet útokům prostřednictvím injektáže skriptu. Tuto kontrolu je možné zakázat na úrovni stránky nebo aplikace. Pokud ho ValidateRequest chcete pro tuto stránku vypnout, nastavte v direktivě @Page na false hodnotu . Direktiva @Page se nachází v horní části deklarativního kódu stránky.

<%@ Page ValidateRequest="False" ... %>

Další informace o ověření požadavku, jeho účelu, jeho zakázání na úrovni stránky a aplikace a také o tom, jak kódovat kód HTML, najdete v tématu Ověření požadavku – prevence útoků skriptů.

Po zakázání ověření požadavku na stránku zkuste znovu kliknout na tlačítko Šifrovat připojovací řetězce. Při zpětném odeslání bude konfigurační soubor přístupný a jeho <connectionStrings> oddíl bude zašifrován pomocí zprostředkovatele DPAPI. Textové pole se pak aktualizuje tak, aby zobrazoval nový Web.config obsah. Jak ukazuje obrázek 4, <connectionStrings> informace jsou teď zašifrované.

Kliknutím na tlačítko Šifrovat připojovací řetězce zašifrujete <oddíl connectionString> .

Obrázek 4: Kliknutím na tlačítko Šifrovat připojovací řetězce zašifrujete <connectionString> oddíl (kliknutím zobrazíte obrázek v plné velikosti)

Šifrovaný <connectionStrings> oddíl vygenerovaný na mém počítači následuje, i když byl kvůli stručnosti odebrán část obsahu elementu <CipherData> :

<connectionStrings 
    configProtectionProvider="DataProtectionConfigurationProvider">
  <EncryptedData>
    <CipherData>
      <CipherValue>AQAAANCMnd8BFdERjHoAwE/...zChw==</CipherValue>
    </CipherData>
  </EncryptedData>
</connectionStrings>

Poznámka

Element <connectionStrings> určuje zprostředkovatele použitého k šifrování (DataProtectionConfigurationProvider). Tyto informace používá UnprotectSection metoda při kliknutí na tlačítko Dešifrovat připojovací řetězce.

Při přístupu k připojovací řetězec informace z Web.config – buď pomocí kódu, který napíšeme, z ovládacího prvku SqlDataSource nebo automaticky vygenerovaného kódu z objektů TableAdapter v našich typed datasets – se automaticky dešifrují. Stručně řečeno, k dešifrování šifrovaného <connectionString> oddílu nemusíme přidávat žádný kód ani logiku navíc. Pokud si to chcete předvést, navštivte v tuto chvíli jeden z dřívějších kurzů, například kurz Jednoduché zobrazení v části Základní generování sestav (~/BasicReporting/SimpleDisplay.aspx). Jak ukazuje obrázek 5, kurz funguje přesně tak, jak bychom očekávali, což značí, že šifrované připojovací řetězec informace jsou automaticky dešifrovány ASP.NET stránkou.

Vrstva přístupu k datům automaticky dešifruje informace o připojovacím řetězci.

Obrázek 5: Vrstva přístupu k datům automaticky dešifruje informace o připojovacím řetězci (kliknutím zobrazíte obrázek v plné velikosti)

Pokud chcete oddíl vrátit <connectionStrings> zpět do formátu prostého textu, klikněte na tlačítko Dešifrovat připojovací řetězce. Na postbacku byste měli vidět připojovací řetězce ve Web.config formátu prostého textu. V tuto chvíli by vaše obrazovka měla vypadat stejně jako při první návštěvě této stránky (viz obrázek 3).

Krok 3: Šifrování oddílů konfigurace pomocí aspnet_regiis.exe

Rozhraní .NET Framework obsahuje řadu nástrojů příkazového řádku ve $WINDOWS$\Microsoft.NET\Framework\version\ složce. V kurzu Používání závislostí mezipaměti SQL jsme se například podívali na použití aspnet_regsql.exe nástroje příkazového řádku k přidání infrastruktury potřebné pro závislosti mezipaměti SQL. Dalším užitečným nástrojem příkazového řádku v této složce je ASP.NET nástroj pro registraci služby IIS (aspnet_regiis.exe). Jak název napovídá, nástroj ASP.NET pro registraci služby IIS se primárně používá k registraci aplikace ASP.NET 2.0 na webovém serveru microsoftu na profesionální úrovni iis. Kromě funkcí souvisejících se službou IIS lze nástroj ASP.NET registrace služby IIS použít také k šifrování nebo dešifrování zadaných konfiguračních oddílů v Web.confignástroji .

Následující příkaz ukazuje obecnou syntaxi použitou k šifrování konfiguračního oddílu pomocí nástroje příkazového aspnet_regiis.exe řádku:

aspnet_regiis.exe -pef section physical_directory -prov provider

section je oddíl konfigurace pro šifrování (například connectionStrings), physical_directory je úplná fyzická cesta ke kořenovému adresáři webové aplikace a zprostředkovatel je název chráněného zprostředkovatele konfigurace, který se má použít (například DataProtectionConfigurationProvider ). Pokud je webová aplikace zaregistrovaná ve službě IIS, můžete také zadat virtuální cestu místo fyzické cesty pomocí následující syntaxe:

aspnet_regiis.exe -pe section -app virtual_directory -prov provider

Následující aspnet_regiis.exe příklad zašifruje <connectionStrings> oddíl pomocí zprostředkovatele DPAPI s klíčem na úrovni počítače:

aspnet_regiis.exe -pef
"connectionStrings" "C:\Websites\ASPNET_Data_Tutorial_73_CS"
-prov "DataProtectionConfigurationProvider"

Podobně lze nástroj příkazového aspnet_regiis.exe řádku použít k dešifrování konfiguračních oddílů. Místo použití -pef přepínače použijte -pdf (nebo místo použijte -pe).-pd Všimněte si také, že název zprostředkovatele není při dešifrování nutný.

aspnet_regiis.exe -pdf section physical_directory
  -- or --
aspnet_regiis.exe -pd section -app virtual_directory

Poznámka

Vzhledem k tomu, že používáme zprostředkovatele DPAPI, který používá klíče specifické pro počítač, musíte spustit aspnet_regiis.exe ze stejného počítače, ze kterého se webové stránky obsluhují. Pokud například spustíte tento program příkazového řádku z místního vývojového počítače a pak nahrajete šifrovaný soubor Web.config na produkční server, produkční server nebude moct dešifrovat informace o připojovací řetězec, protože byly zašifrované pomocí klíčů specifických pro váš vývojový počítač. Poskytovatel RSA toto omezení nemá, protože je možné exportovat klíče RSA do jiného počítače.

Principy možností ověřování databáze

Před tím, INSERTUPDATEDELETE než může nějaká aplikace vydat SELECTdotazy na databázi Microsoft SQL Server, musí databáze nejprve identifikovat žadatele. Tento proces se označuje jako ověřování a SQL Server poskytuje dvě metody ověřování:

  • Ověřování systému Windows – proces, ve kterém je aplikace spuštěná, se používá ke komunikaci s databází. Při spuštění aplikace ASP.NET prostřednictvím sady Visual Studio 2005 s ASP.NET Development Server ASP.NET aplikace předpokládá identitu aktuálně přihlášeného uživatele. U ASP.NET aplikací na serveru Iis (Microsoft Internet Information Server) ASP.NET aplikace obvykle přebírají identitu domainName``\MachineName nebo domainName``\NETWORK SERVICE, i když je možné ji přizpůsobit.
  • Ověřování SQL – ID uživatele a hodnoty hesla se zadají jako přihlašovací údaje pro ověřování. Při ověřování SQL jsou ID uživatele a heslo k dispozici v připojovací řetězec.

Ověřování Systému Windows je upřednostňováno před ověřováním SQL, protože je bezpečnější. Při ověřování systému Windows je připojovací řetězec bez uživatelského jména a hesla, a pokud se webový server a databázový server nacházejí na dvou různých počítačích, přihlašovací údaje se neposílají přes síť ve formátu prostého textu. Při ověřování SQL jsou však ověřovací přihlašovací údaje pevně zakódovány v připojovací řetězec a přenášejí se z webového serveru na databázový server ve formátu prostého textu.

V těchto kurzech se používá ověřování Windows. Pomocí kontroly připojovací řetězec zjistíte, jaký režim ověřování se používá. Naše kurzy připojovací řetězecWeb.config:

Data Source=.\SQLEXPRESS; AttachDbFilename=|DataDirectory|\NORTHWND.MDF; Integrated Security=True; User Instance=True

Integrované zabezpečení =True a chybějící uživatelské jméno a heslo značí, že se používá ověřování Systému Windows. V některých připojovacích řetězcích se místo integrovaného zabezpečení=true používá termín Důvěryhodné připojení=Ano nebo Integrované zabezpečení=SSPI, ale všechny tři označují použití ověřování systému Windows.

Následující příklad ukazuje připojovací řetězec, která používá ověřování SQL. $CREDENTIAL_PLACEHOLDER$ je zástupný symbol pro pár klíč-hodnota hesla. Všimněte si, že přihlašovací údaje jsou vložené v připojovací řetězec:

Server=serverName; Database=Northwind; uid=userID; $CREDENTIAL_PLACEHOLDER$

Představte si, že útočník může zobrazit soubor vaší Web.config aplikace. Pokud použijete ověřování SQL pro připojení k databázi, která je přístupná přes internet, může útočník použít tuto připojovací řetězec pro připojení k databázi prostřednictvím aplikace SQL Management Studio nebo ze ASP.NET stránek na vlastním webu. Pokud chcete tuto hrozbu zmírnit, zašifrujte připojovací řetězec informace pomocí Web.config chráněného konfiguračního systému.

Poznámka

Další informace o různých typech ověřování dostupných v SQL Server najdete v tématu Vytváření zabezpečených ASP.NET aplikací: Ověřování, autorizace a zabezpečená komunikace. Další připojovací řetězec příklady, které ilustrují rozdíly mezi syntaxí ověřování systému Windows a SQL, najdete v ConnectionStrings.com.

Souhrn

Ve výchozím nastavení nelze k souborům s příponou .config v aplikaci ASP.NET přistupovat přes prohlížeč. Tyto typy souborů se nevrací, protože můžou obsahovat citlivé informace, jako jsou připojovací řetězce databáze, uživatelská jména a hesla atd. Chráněný konfigurační systém v .NET 2.0 pomáhá dále chránit citlivé informace tím, že umožňuje šifrování zadaných oddílů konfigurace. Existují dva předdefinované zprostředkovatelé chráněné konfigurace: jeden, který používá algoritmus RSA, a druhý, který používá rozhraní API ochrany dat windows (DPAPI).

V tomto kurzu jsme se podívali na šifrování a dešifrování nastavení konfigurace pomocí zprostředkovatele DPAPI. Toho lze dosáhnout jak programově, jak jsme viděli v kroku 2, tak i pomocí nástroje příkazového aspnet_regiis.exe řádku, který byl popsaný v kroku 3. Další informace o použití klíčů na úrovni uživatele nebo použití poskytovatele RSA najdete v části Další informace.

Šťastné programování!

Další čtení

Další informace o tématech probíraných v tomto kurzu najdete v následujících zdrojích informací:

O autorovi

Scott Mitchell, autor sedmi knih o ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, školitel a spisovatel. Jeho nejnovější kniha je Sams Teach Yourself ASP.NET 2.0 in 24 Hours. Můžete ho najít na mitchell@4GuysFromRolla.comadrese . nebo prostřednictvím jeho blogu, který najdete na http://ScottOnWriting.NETadrese .

Zvláštní poděkování

Tato série kurzů byla zkontrolována mnoha užitečnými recenzenty. Hlavními recenzenty tohoto kurzu byli Teresa Murphy a Randy Schmidt. Chcete si projít moje nadcházející články na WEBU MSDN? Pokud ano, dejte mi čáru na mitchell@4GuysFromRolla.comadresu .