我正在为windows azure开发一个使用WSFederation进行身份验证的解决方案(Web应用程序)。由于我在天蓝色测试阶段(本地测试成功),我决定使用我用于本地测试的相同自签名证书。
这里的问题是我收到一条错误消息“ X.509证书CN = mytestsite.com.br不在受信任的人民商店中.X.509证书CN = mytestsite.com.br链建设失败。使用的证书具有无法验证的信任链 “。
这个错误很有意义,因为它是一个自签名的证书,但是因为我正在上演环境(而且我绝对不愿意立即向我的赞助商询问有效证书的额外预算......)我想无论如何要使用自签名的。所以我将 certificateValidationMode 更改为“无”,但我仍然得到相同的验证错误......似乎忽略了验证模式!!!
有谁知道我能做些什么让事情有效? (购买有效的证书将是我的最后一次拍摄,因为此时我的预算相当昂贵......)
答案 0 :(得分:1)
我会使用自签名证书,使用代码将其“部署”到您的Trusted People
商店,一切都应该很好。无论如何,这将更接近实际生产使用(如果你在生产中使用PeerTrust,你也必须在那里做同样的事情,即使有真正的证书)。
private static void CopyServerCertIntoPeopleStore()
{
var myStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
myStore.Open(OpenFlags.ReadOnly);
var peopleStore = new X509Store(StoreName.TrustedPeople, StoreLocation.CurrentUser);
var cert = myStore.Certificates.Find(
X509FindType.FindByThumbprint,
SettingFetcher.GetSetting(SettingFetcher.SettingType.ApplicationVariable, "WcfServiceCertificateThumbprint"),
true
).OfType<X509Certificate2>().First();
peopleStore.Open(OpenFlags.ReadWrite);
peopleStore.Add(cert);
}
使用类似的东西,只需将SettingFetcher替换为RoleEnvironment.GetConfigurationSettingValue
或其他任何东西来抓取指纹。
答案 1 :(得分:0)
我设法通过将“certificateValidationMode”添加到STS web.config来实现。