2016-04-15 26 views
0

我正在使用.net MachineKey.Protect方法來加密一個應用程序中的令牌以及相應的MachineKey.Unprotect方法,以驗證不同應用程序中的令牌。啓用32位應用程序時MachineKey.Protect/Unprotect中斷

一切工作正常,直到我必須設置啓用32位應用程序在IIS中得到一些其他的代碼運行。然後MachineKey.Unprotect方法拋出異常

加密操作期間發生錯誤。

我試過這兩種應用程序在同一個應用程序池,並在不同的應用程序池,以及設置的所有組合。除之外的任何內容都啓用32位應用程序設置爲在所有情況下都會導致錯誤

關於可能導致此問題的任何想法?

+0

我只能猜測是c掛起代碼的位數也會對解密產生影響。加密和解密時保持不變。 – ChrisBint

回答

0

回答我的問題是指定machine.config中

的C兩個版本一個固定的計算機密鑰:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \ CONFIG \機。配置

C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \ machine.config中

加入這個元素在<system.web>

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

我,爲什麼這個作品仍然不確定。 IIS被設置爲在IIS管理器中使用服務器範圍的機器密鑰。解決問題的線索出現在我試圖在machine.config文件中搜索現有密鑰時。

您仍然需要確保兩個應用程序都以相同的模式運行。

你甚至可以加密在一個應用程序與運行啓用32位應用程序設置爲解密在另一個與啓用32位應用程序設置爲如果你設置了在應用程序的web.config中機鍵

編輯

由於嘗試將其部署到運行Server 2008的服務器,我們發現有必要修改4個machine.config文件:

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中

還是真的不知道爲什麼

+2

希望這不是*你使用的價值,你現在已經與世界分享了。 –

+0

@Damien_The_Unbeliever那麼我的web應用程序是什麼?如果你能告訴我,我會留下深刻的印象。 (它實際上並不是那些值btw) –

0

我其實並不確定,但Enable 32bit applications改變了工作過程的位數。

在32位系統上它什麼都不做。

在x64系統上,當它設置爲false(默認值)時,IIS工作進程在x64模式下工作並使用64位環境(路徑,註冊表等)。但是,如果此設置設置爲true,則相關工作進程將以x86模式啓動,並使用32位(syswow)環境 - 設置,可執行文件,com組件等 - 可能會消失或顯示不同的版本。這是因爲syswow環境使用不同的系統路徑,不同的註冊表位置等。

我不會驚訝地發現爲普通和syswow環境存儲的加密密鑰是不同的。無論您用於加密,嘗試在32位模式下啓動並重試。

另外,Error occurred during a cryptographic operation.並沒有說明太多,真的。你檢查過stacktrace或innerexceptions嗎?

+0

堆棧跟蹤不好。不泄露關於加密錯誤的任何信息 –

相關問題