SustainSys ASP.NET MVC 4.8迁移后密钥不信赖问题求助
解决ASP.NET MVC (.NET 4.8) SustainSys SAML密钥信任错误及请求头问题
针对你遇到的"The signature verified correctly with the key contained in the signature, but that key is not trusted"错误,结合新服务器的Upgrade-Insecure-Requests: 1请求头差异,按以下步骤排查配置:
1. 确保IdP签名证书被显式信任
这个错误的核心是应用能验证签名,但不认可该密钥的合法性。解决方式有两种:
- 方式一:通过web.config直接配置证书
在<sustainsys.saml2>节点下的<identityProviders>里,显式添加IdP的签名证书(可用证书指纹或嵌入证书内容):<sustainsys.saml2> <identityProviders> <add entityId="你的IdP实体ID" metadataLocation="你的IdP元数据URL"> <signingCertificates> <!-- 按指纹从本地存储加载 --> <add storeName="TrustedPeople" storeLocation="LocalMachine" x509FindType="FindByThumbprint" findValue="证书指纹字符串" /> <!-- 或者直接嵌入证书Base64内容 --> <!-- <add certificate="MIIC5zCCAc+gAwIBAgIU..." /> --> </signingCertificates> </add> </identityProviders> </sustainsys.saml2> - 方式二:将证书导入服务器信任存储
把IdP的签名证书安装到新服务器的本地计算机 > 受信任的人或受信任的根证书颁发机构存储中,确保应用程序池账号有权限读取该存储。
2. 修正SP端点的协议与URL配置
Upgrade-Insecure-Requests: 1头说明新服务器启用了HTTPS强制跳转,需确保SP的元数据端点与实际请求协议一致:
- 在web.config的
<serviceProvider>节点中,明确指定HTTPS格式的实体ID和ACS回调地址:<serviceProvider entityId="https://新服务器SP实体ID" assertionConsumerServiceUrl="https://新服务器域名/Saml2/Acs" returnUrl="https://新服务器域名/默认跳转页" /> - 如果服务器在反向代理/负载均衡后,需开启负载均衡支持,让SustainSys识别代理传递的真实协议(如
X-Forwarded-Proto):<serviceProvider> <loadBalanced enabled="true" /> </serviceProvider>
3. 调整证书验证模式(调试/特殊场景)
如果IdP使用自签名证书或内部CA签发的证书,可临时调整证书验证规则(生产环境需谨慎):
<sustainsys.saml2> <certificateValidation certificateValidationMode="PeerOrChainTrust" revocationMode="NoCheck" /> </sustainsys.saml2>
PeerOrChainTrust:信任证书本身或其所在的证书链NoCheck:跳过吊销检查(仅调试或非敏感环境使用)
4. 排查IIS重定向规则影响
检查新服务器的IIS是否配置了强制HTTPS的重定向规则,确保SAML请求(尤其是ACS回调)不会被错误重定向。可在web.config的<system.webServer>中添加例外规则,允许SAML端点的请求直接处理:
<rewrite> <rules> <rule name="Force HTTPS" stopProcessing="true"> <match url="^(?!Saml2/).*$" /> <conditions> <add input="{HTTPS}" pattern="off" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" /> </rule> </rules> </rewrite>
内容的提问来源于stack exchange,提问作者Buggy
相关产品推荐
相关产品推荐

