2016-04-15 11 views
0

Ich verwende die .net MachineKey.Protect Methode, um ein Token in einer Anwendung und die entsprechende MachineKey.Unprotect Methode zu verschlüsseln, um das Token in einer anderen Anwendung zu verifizieren.MachineKey.Protect/Unprotect bricht beim Aktivieren von 32-Bit-Anwendungen ab

Alles funktioniert gut, bis ich Aktivieren 32-Bit-Anwendungen zu Echte in IIS gesetzt haben einige andere Code zu erhalten zu laufen. Dann löst die MachineKey.Unprotect-Methode eine Ausnahme aus

Fehler trat während einer kryptografischen Operation auf.

Ich habe dies mit beiden Anwendungen im gleichen App-Pool und beide in verschiedenen App-Pools und alle Kombinationen der Einstellung ausprobiert. Alles außer der Enable 32-Bit-Anwendungen auf gesetzt False in allen Fällen führt zu dem Fehler.

Irgendwelche Ideen zu was könnte das verursachen?

+0

ich nur vermuten kann, dass c Das Hängenbleiben der Bitheit des Codes hat auch Auswirkungen auf die Entschlüsselung. Halten Sie die Bitness beim Verschlüsseln und Entschlüsseln gleich. – ChrisBint

Antwort

0

Die Antwort auf mein Problem war eine feste Maschine Schlüssel in beiden Versionen von machine.config

C angeben: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ Maschine. config-

und

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ machine.config

Zugabe dieses Elements in <system.web>

<machineKey validationKey="C3A9A590C67C27D96650E4EF5F586943A641187F5655052C3EB0BAC852CAA7D094D21376D4C8D91E989A36D9D2BF868B3CA63493AC6358B0415C1E34E1B8C346" 
     decryptionKey="C6E83A1393A826814BE889349CBFDFBFCDC9318313616EDD" 
     validation="HMACSHA512" decryption="AES" /> 

bin ich immer noch nicht sicher, warum das funktioniert. IIS wurde so eingerichtet, dass ein serverweiter Computerschlüssel im IIS-Manager verwendet wird. Der Schlüssel zur Lösung des Problems kam, als ich in den machine.config-Dateien nach den vorhandenen Schlüsseln suchen wollte.

Sie müssen weiterhin sicherstellen, dass beide Anwendungen im selben Modus ausgeführt werden.

können Sie sogar encrypt in einer Anwendung mit läuft Aktivieren 32-Bit-Anwendungen Satz Wahr und entschlüsseln in einem anderen mit Aktivieren 32-Bit-Anwendungen Satz Falsch, wenn Sie die Set Computerschlüssel in der web.config Anwendungen

EDIT

Da versuchen, es zu Server bereitstellen Server 2008 fanden wir es notwendig war, 4 machine.config-Dateien zu ändern:

C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG \ machine.config C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ machine.config C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ CONFIG \ machine.config C: \ Windows \ Microsoft. NET \ Framework64 \ v4.0.30319 \ Config \ machine.config

Sie wissen immer noch nicht genau, warum

+2

Hoffentlich ist das nicht * wörtlich * der Wert, den Sie verwenden, den Sie jetzt mit der Welt geteilt haben. –

+0

@Damien_The_Unbeliever Was ist meine Webanwendung? Ich bin beeindruckt, wenn Sie es mir sagen können. (und es ist nicht wirklich diese Werte btw) –

0

Ich weiß eigentlich nicht sicher, aber die Enable 32bit applications ändert die Arbeitsprozess Bissigkeit.

Auf 32-Bit-System tut es nichts.

Auf x64-System, wenn es auf false (Standard) festgelegt ist, arbeiten IIS-Arbeitsprozesse im x64-Modus und verwenden 64-Bit-Umgebung (Pfad, Registrierung usw.). Wenn diese Einstellung jedoch auf true gesetzt ist, werden verwandte Worker-Prozesse im x86-Modus gestartet, und 32bit (syswow) -Umgebung - Einstellungen, ausführbare Dateien, com-Komponenten usw. - können verschwinden oder verschiedene Versionen angezeigt werden. Das liegt daran, dass syswow environament verschiedene Systempfade, verschiedene Registry-Positionen usw. verwendet.

Ich wäre nicht überrascht zu sehen, dass die Verschlüsselungsschlüssel für normale und syswow-Umgebungen unterschiedlich sind. Was auch immer Sie zum Verschlüsseln verwendeten, versuchen Sie es im 32-Bit-Modus und versuchen Sie es erneut.

Auch, Error occurred during a cryptographic operation. sagt nicht viel, wirklich. Hast du StackTrace oder innexceptions überprüft?

+0

Stack-Trace ist nicht gut. Es werden keine Informationen über den kryptografischen Fehler ausgegeben. –

Verwandte Themen