Aggiungere la chiave della macchina a machine.config nell'ambiente Load Balancing in più versioni di .net framework

Ho due server web dietro un bilanciatore di carico F5. Ogni server web ha applicazioni identiche all'altro. Non c'era nessun problema finché la configuration dell'equilibratore di carico non è cambiata dalla persistenza dell'indirizzo di origine alle minime connessioni.

Ora in alcune applicazioni riceve questo errore

Errore del server nell'applicazione '/'

La validazione del MAC di viewstate non è rioutput. Se questa applicazione è ospitata da una farm web o un cluster, assicurarsi che la configuration specifichi lo stesso algorithm di validation e validation. AutoGenerate non può essere utilizzato in un cluster. Descrizione: Un'exception non gestita si è verificata durante l'esecuzione della richiesta web corrente. Rivedere la traccia dello stack per ulteriori informazioni sull'errore e da where proveniva nel codice.

Dettagli di exception: System.Web.HttpException: la validazione del viewstate MAC non è rioutput. Se questa applicazione è ospitata da una farm web o un cluster, assicurarsi che la configuration specifichi lo stesso algorithm di validation e validation. AutoGenerate non può essere utilizzato in un cluster.

Errore di origine:

Il codice sorgente che ha generato questa exception non gestita può essere visualizzato solo se compilato in modalità di debug. Per abilitare questa operazione, segui una delle operazioni descritte di seguito, quindi richiedi l'URL:

  1. Aggiungere una direttiva "Debug = true" alla parte superiore del file che ha generato l'errore. Esempio:

o:

2) Aggiungere la seguente sezione al file di configuration dell'applicazione:

Si noti che questa seconda tecnica provocherà a compilare tutti i file di una determinata applicazione in modalità di debug. La prima tecnica causerà solo il particolare file da compilare in modalità di debug.

Importnte: l'esecuzione di applicazioni in modalità di debug richiede un sovraccarico di memory / performance. È necessario assicurarsi che un'applicazione sia disabilitata prima di distribuire nello scenario di produzione.

Come si aggiunge una chiave di macchina al file machine.config? Posso farlo a livello di server in IIS oa livello di sito / applicazione per each sito? Le chiavi di validation e di decrittografia devono essere le stesse su entrambi i server web o sono differenti? Dovrebbero essere differenti per each versione machine.config di .net?

Non riesco a trovare alcuna documentazione di questo scenario.

One Solution collect form web for “Aggiungere la chiave della macchina a machine.config nell'ambiente Load Balancing in più versioni di .net framework”

Se è necessario solo per il tuo sito web, puoi aggiungerlo al web.config del tuo sito web. Se ci sono più siti / applicazioni che devono utilizzare la stessa macchinaKey per crittografare / decrittografare, cioè quando si utilizzerebbe un file di configuration a macchina.

E sì, dovrebbero essere gli stessi in tutti i server della farm, e dovresti farlo per each macchina.config (.NET 2.0 + 4.0 e x86 + x64) della cartella .NET, per cui potresti aggiornare quattro file.

Ecco un codice di esempio che puoi utilizzare per generare le tue chiavi:

/// <summary> /// http://msdn.microsoft.com/en-us/library/w8h3skw9.aspx /// </summary> public static string CreateMachineKey(int characterLength) { /* * decryptionKey: * DES: 64 bits (16 hexadecimal characters) * 3DES:192 bits (48 hexadecimal characters) * AES: 128 bits (32 characters), 192 bits (48 characters), or 256 bits (64 characters) * validationKey: AES requires a 256-bit key (64 hexadecimal characters). MD5 requires a 128-bit key (32 hexadecimal characters). SHA1 requires a 160-bit key (40 hexadecimal characters). 3DES requires a 192-bit key (48 hexadecimal characters). HMACSHA256 requires a 256-bit key (64 hexadecimal characters). HMACSHA384 requires a 384-bit key (96 hexadecimal characters). HMACSHA512 requires a 512-bit key (128 hexadecimal characters). */ byte[] byteArray = new byte[characterLength / 2]; RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); rng.GetBytes(byteArray); StringBuilder sb = new StringBuilder(characterLength); for (int i = 0; i < byteArray.Length; i++) { sb.Append(string.Format("{0:X2}", byteArray[i])); } Debug.WriteLine(sb); return sb.ToString(); } 

Ecco un esempio di machine.config:

 <system.web> <machineKey decryption="AES" decryptionKey="D416EFCFEC011CC3A8F0F72A15E7EF725AA39FDBCE3CA361" validation="HMACSHA256" validationKey="EF4BFB4B2E1A9AB427430897A13528E4530A231112014E070B246DCA7383EB7F4163D685F590E9B54005F5215AD3BA7CE4EA7D404FE310C543D100D09CC00AE2"/> </system.web> 

File:

% SYSTEMROOT% \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ machine.config
% SYSTEMROOT% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ machine.config
% SYSTEMROOT% \ Microsoft.NET \ Framework \ v2.0.5727 \ Config \ machine.config
% SYSTEMROOT% \ Microsoft.NET \ Framework64 \ v2.0.5727 \ Config \ machine.config

Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.