2013-02-19 14 views
6

Moja aplikacja ma możliwość ochrony wybranego pliku konfiguracyjnego. Odbywa się to za pomocą metody SectionInformation.ProtectSection dla określonej sekcji załadowanego Configuration. Używam standardowego dostawcy RsaProtectedConfigurationProvider.Jak ustawić rozmiar klucza dla RSAProtectedConfigurationProvider z kodu

Kod jest bardzo prosty - bardzo podobny do example on MSDN.

Czy istnieje sposób na ustawienie rozmiaru klucza, który powinien być używany przez dostawcę? Jak wiem, domyślny dla RSA to 1024. Muszę ustawić go na 2048 lub większy.

Podobny można zrobić za pomocą opcji wiersza poleceń -size gdy używamy asp_regiis.exe. Ale muszę to zrobić z kodu. Być może istnieje jakikolwiek sposób skonfigurowania RsaProtectedConfigurationProvider lub wstępnego utworzenia klucza i wstrzyknięcia go w jakiś sposób do domyślnego magazynu kluczy, więc następne użycie SectionInformation.ProtectSection dogoni to ...

Dzięki za porady lub przykłady.

+0

myślę, że należy stworzyć swój własny klucz pojemnika, a następnie wskazać na to, używając [keyContainerName] (http://msdn.microsoft.com/en-us/library/68ze1hb2 (v = vs.100) .aspx). –

+0

Czy to rozwiąże problem, kirmir, odpowiedz na komentarze. –

+0

@ Koordynacja, prawdopodobnie tak. Jedyne, co mi się nie podoba, to w tym przypadku muszę napisać konfigurację kontenera w każdym zaszyfrowanym pliku konfiguracyjnym. Ponadto należy skonfigurować prawa dostępu do kontenera. –

Odpowiedz

1

RSAProtectedConfigurationProvider udostępnia dwie różne metody. Jeden z nich o nazwie AddKey może zostać użyty do utworzenia klucza wewnątrz kontenera. Jeśli zaznaczysz klucz jako możliwy do eksportu, możesz później użyć metody ExportKey, aby pobrać ten klucz i zapisać go w innym miejscu.

Jeśli masz już istniejący klucz, możesz użyć metody ImportKey. Przyjmuje blok blobów XML podobny do tego, który pochodzi z ExportKey.

RsaProtectedConfigurationProvider używa domyślnej nazwy kontenera NetFrameworkConfigurationKey, jeśli nie została podana. Jeśli więc wstępnie utworzysz klucz i dodasz go do tego kontenera, dostawca powinien go odebrać, gdy go użyjesz.

// Same properties as .NET uses to load the key 
CspParameters csp = new CspParameters(); 
csp.KeyContainerName = "NetFrameworkConfigurationKey"; 
csp.KeyNumber = 1; 
csp.ProviderType = 1; 

// Create the new key, and save it in the key store 
rsa = new RSACryptoServiceProvider(2048, csp); 
rsa.PersistKeyInCsp = true; 
rsa.Clear(); 
Powiązane problemy