我在使用身份验证的MVC 4站点上工作.该站点要求我指定机器密钥值.我通过IIS接口取消选择"在运行时自动生成",生成键值并选择"为每个应用程序生成唯一键"
web.config条目如下所示:
<machineKey decryption="DES" decryptionKey="{hex-key value},IsolateApps"
validationKey="{hex-key value},IsolateApps" />;
Run Code Online (Sandbox Code Playgroud)
虽然这似乎在另一个Web项目上正常工作,但它导致我正在处理的开发机器上的"解密密钥指定了无效的十六进制字符"错误(在IIS-Express和IIS 7.5中).
",IsolateApps"
从键值中删除可以解决问题,但由于我在生产中需要这个选项,所以我现在不想删除它只是为了在部署时遇到这个问题.
是什么赋予了?开发框是一个带有.net 2.0和.net 4.0的SQL 2008 R2框.
我们(我们的IT合作伙伴真的)最近为我们拥有的网络养殖网站更改了一些DNS,以便两个生产服务器之间进行循环DNS切换.在此切换之前,我们确实没有WebResource.axd
文件问题.自切换以来,当我们点击实时公共URL时,我们收到错误:
CryptographicException
填充无效,无法删除.
当我们自己点击特定服务器时,它们会很好地加载.我研究了这个问题,看起来因为它们在两台服务器之间共享资产,我们需要machineKey
在web.config
每台服务器上保持一致,这样它们才能在两者之间一致地加密和解密.我的问题是:
machineKey
在服务器上生成一个工具,还是需要编写代码才能执行此操作?machineKey
到web.config
每个服务器上或者你认为我会需要做任何事情就两个服务器协同工作?(两者web.config
目前都没有machineKey
)我在asp.net网站上的某些时候收到以下错误.
Sys.WebForms.PageRequestManagerServerErrorException:
Validation of viewstate MAC failed.
If this application is hosted by a Web Farm or cluster,
ensure that <machineKey> configuration specifies the
same validationKey and validation algorithm.
AutoGenerate cannot be used in a cluster.
Run Code Online (Sandbox Code Playgroud)
当页面刷新时,没问题.我怎样才能解决这个问题?
我正在运行Azure网站.每当我部署时,每个人都会因为machineKey
更改而退出.
我指定machineKey
的web.config
,但是这并没有解决问题.我相信这是因为Azure会自动覆盖machineKey
[1].
我在这里找到了几个类似的问题,但答案链接到死链接.
那么,解决方案是什么?当然,无论Azure上的部署如何,都有办法让用户登录.
我在哪里可以找到machineKey
ASP.NET 的配置部分?
我的应用程序Web.config
中没有一个,根目录中没有一个,我的应用程序Web.config
中没有一个machine.config
.
这是否意味着有一些其他默认硬编码到ASP.NET中?如果是这样,默认值是多少?(适用于.NET 2和4)
阅读本文:http://msdn.microsoft.com/en-us/library/w8h3skw9.aspx
我希望在某个地方找到这样的东西:
<machineKey
validationKey="AutoGenerate,IsolateApps"
decryptionKey="AutoGenerate,IsolateApps"
/>
Run Code Online (Sandbox Code Playgroud)
编辑: 1.1文档似乎相当明确wrt默认值:http://msdn.microsoft.com/en-us/library/w8h3skw9( VS.71) .aspx但4个文档相当模糊http://msdn.microsoft .COM/EN-US /库/ w8h3skw9.aspx
我正在使用MachineKey API来加密/解密ASP.NET应用程序中的一段信息.我在用
MachineKey.Encode(data, MachineKeyProtection.All)
和
MachineKey.Decode(data, MachineKeyProtection.All)
API的方法.启用"加载用户配置文件"时,在Windows 8和Windows Server 2012上一切正常.问题是由于某些原因它不能在应用程序池重启后生存Windows Server 2008 R2 with IIS 7.5
.
最初我觉得我需要在应用程序池上启用" 加载用户配置文件"设置,但这没有任何区别.知道我在这里可能缺少什么吗?
谢谢
我试图打开viewstate加密始终作为IIS6中托管的ASP.NET 3.5网站的安全措施.我们关闭了viewstate,但仍然在此字符串中看到一些"controlstate".在测试环境中,我只需在web.config中设置以下内容,我就不能再将basest解码为viewstate为半明文:
<pages enableViewState="false" enableViewStateMac="true" viewStateEncryptionMode="Always">
我甚至将以下内容(由机器密钥生成器生成)添加到machine.config并仍然在我的测试服务器上加密viewstate:
<machineKey validationKey="002..." decryptionKey="D90E..." validation="SHA1" decryption="AES" />
我的非测试环境似乎没有获得上述更改,因为我始终可以使用上述设置将viewstate解码为纯文本.在做出任何改变之后,我总是感到不安.
有关我的非测试网络服务器的一些信息:
任何人都可以建议在哪里寻找可能会干扰asp.net viewstate加密的其他设置?
编辑:现在在我的iis测试服务器上我无法撤消viewStateEncryptionMode设置,因为它正在加密视图状态,即使我将其设置为"从不"并且我的其他网站似乎都没有抓住此设置.我在哪里可以看到这个属性被覆盖的地方?是否存在需要清除此设置的缓存,除了iisreset/stop www service/touch machine.config时要执行的操作?
编辑决赛:经过几天研究配置文件后,我放弃并通过代码实现了这一点.我已经有一个附加到页面事件的安全模块,所以在Page_Load中我添加了:Page.RegisterRequiresViewStateEncryption();
我真的很想知道是什么阻止了这个设置被IIS6 immediatley选中.当我在本地运行cassini时,如果我通过pages节点将viewStateEncryptionMode设置为"Always",我会立即看到它对viewstate进行编码并使用id ="__ VIEWSTATEENCRYPTED"渲染其他隐藏字段.当我将其设置为"从不"时,我会立即看到加密关闭.如果我对我的IIS6托管网站上的网站进行了相同的更改,它将立即生效,但如果我允许设置保留在那里,它最终会占用.我会停止/启动www服务,重置iis,清除ASPNET临时缓存,但我不知道还有什么可以尝试?希望这篇文章可以ROT一段时间,将来有人会看到我所经历的相同行为,我们可以进一步弄清楚这一点!
我有一个ASP.NET MVC工作流配置为由负载均衡器管理的两个网站.这些网站使用Sql Server作为会话状态提供程序,并关闭身份验证(不需要).
现在,偶尔我似乎失去了会话状态,我相信这是因为请求由备用服务器处理,所以基本上用户从服务器跳到服务器,这取决于负载均衡器看起来如何适合.我并不总是在工作流的同一阶段"丢失会话状态",所以我认为它与Web场配置+ sql server会话状态有关.
两个应用程序使用相同的机器密钥来加密和解密存储在sql server中的会话状态.
两台服务器上的配置如下:
<authentication mode="None" />
<sessionState mode="SQLServer" sqlConnectionString="{connection-string}" />
<machineKey decryptionKey="777CB456774AF02F7F1AC8570FAF31545B156354D9E2DAAD"
validationKey="89B5B536D5D17B8FE6A53CBB3CA8B8695289BA3DF0B1370BC47D362D375CF91525DDB5307D8A288230DCD4B3931D23AED4E223955C45CFF2AF66BCC422EC7ECD" />
Run Code Online (Sandbox Code Playgroud)
我已经确认两台服务器上都是一样的,有什么我遗漏的吗?
当我使用单个服务器时,在我的开发环境中不会发生这种情况.
我担心我会受到星期五蓝调的影响,毫无疑问下周会找到答案,遗憾的是我不想等!
有任何想法吗?
机器密钥在asp.net中有哪些不同的用途?我认为以下是正确的,但认为可能还有更多.
我发现自己想要获取当前应用程序的ASP.NET机器密钥.当然,如果在配置文件中指定了机器密钥,这很容易,但是如果它设置为自动生成,那么在任何地方似乎都没有公共方法来获取它.
基本上我想要它所以我可以为自己编写加密/ MACed cookie,就像ASP.NET Forms Authentication提供程序一样.
有没有人有任何指针或想法?
machinekey ×10
asp.net ×9
viewstate ×3
asp.net-mvc ×2
c# ×2
encryption ×2
.net ×1
azure ×1
base64 ×1
cookies ×1
iis ×1
web-config ×1
web-farm ×1