2011-08-10 2 views
5

Cela me conduit littéralement bananes - je suis en vacances à partir de demain, mais si je ne peux pas travailler aujourd'hui, alors il est sous la menace - donc toute aide très appréciée! Premièrement, mon site Web a un élément <machinekey /> défini manuellement afin que les deux serveurs Web de la ferme Web soient synchronisés. J'ai vérifié ceci avec le directeur d'IIS (pourquoi pourquoi je demande, en dépit de la similitude avec tant d'autres questions). Il ressemble à ceci (les clés élidés - mais ils sont la bonne longueur):Formes d'authentification 4.0 sur Web Farm

<machineKey validationKey="[512 bit hex]" 
    decryptionKey="[256-bit hex]" 
    validation="SHA1" 
    decryption="AES" /> 

Le site est en cours d'exécution Asp.Net MVC3 et j'utilise l'authentification par formulaire en mode « normal » (à savoir non 2.0 en mode compat). J'utilise l'authentification par formulaire pour créer un ticket d'authentification - en utilisant le code comme le suivant:

FormsAuthentication.SetAuthCookie(userName, false); 

Mes formulaires config Auth est très simple; il n'y a pas de paramètres IIS ou à l'échelle serveur en place qui remplacent les valeurs par défaut documentées:

<authentication mode="Forms"> 
    <forms defaultUrl="~/Unauthorised" 
    loginUrl="~/Unauthorised" 
    ticketCompatibilityMode="Framework40" /> 
</authentication> 

Et puis j'ai détourné la fonctionnalité de lecture cookies as per this MSDN topic afin que je puisse créer le principal et l'identité que je veux.

problème est - une seule moitié de la ferme Web est capable de déchiffrer le cookie d'authentification, l'autre moitié (ie selon un ne pas authentifier l'utilisateur) juste donne:

System.Security.Cryptography.CryptographicException: Length of the data to decrypt is invalid.

Avec cette comme haut-partie de la trace de la pile:

[CryptographicException: Length of the data to decrypt is invalid.] 
System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) +12521039 
System.Security.Cryptography.CryptoStream.FlushFinalBlock() +53 
System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Boolean useValidationSymAlgo, Boolean useLegacyMode, IVType ivType) +331 
System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket) +293 

Nous utilisons un peu ancienne (mais très fiable) d'équilibrage de charge - qui ne modifie pas le trafic HTTP - et e Le trafic dans ce cas est HTTPs; Je suis capable de vérifier que c'est toujours un serveur et pas les deux en ayant utilisé Fiddler pour décrypter et inspecter le trafic.

Ceci indique clairement que la machineKey n'est pas synchronisée - mais ils ne le sont pas - donc aucune idée de ce qui se passe !!?

Merci d'avance!

+1

Avez-vous vérifié vos correctifs? http://blog.evonet.com.au/post/SystemSecurityCryptographyCryptographicException-Length-of-the-data-to-decrypt-is-invalid.aspx –

+0

@ Surfer513 - affichez une réponse; Je ne suis pas encore sûr - mais parler à l'un des membres de l'équipe de soutien pourrait en être la cause ... –

Répondre

5

Lorsque différents serveurs ont des taches différentes, il a le potentiel de modifier le comportement de chiffrement (/ déchiffrement), donc qui peut causer cette exception d'exécution:

System.Security.Cryptography.CryptographicException: Length of the data to decrypt is invalid. 

Plus d'informations sur cette question se trouve ici: http://blog.evonet.com.au/post/SystemSecurityCryptographyCryptographicException-Length-of-the-data-to-decrypt-is-invalid.aspx

+0

@ Surfer512 - Il y avait tellement de mises à jour que l'une des machines doit être faite du jour au lendemain (disons que fois autant que nécessaire sur l'autre ...) - donc je serai en mesure de mettre à jour alors. À votre santé! –

+0

Lien dans la réponse est mort - * "Ce site ne peut être atteint/blog.evonet.com.au adresse DNS du serveur n'a pas pu être trouvé" * – Pang