ADFS - 证书不是唯一的

时间:2012-12-19 16:42:21

标签: windows adfs federation

我创建了几个使用SAML2身份验证的应用程序。这些应用程序(包括SalesForce)通常共享同一个域(即:reports.application.com,portal.application.com等),但它们不属于单个应用程序,甚至不属于同一堆栈。一些子域导致SalesForce,一些子域导向其他应用程序。

问题是ADFS报告“证书不是唯一的”并且拒绝允许在ADFS数据库中注册应用程序,因为证书是相同的。这对SalesForce来说尤其麻烦。

我不知道如何解决这个问题。

编辑:重要的是要注意几乎所有这些应用程序都是SAML2而不是ADFS。

2 个答案:

答案 0 :(得分:0)

我对这句话感到有些困惑“重要的是要注意几乎所有这些应用程序都是SAML2而不是ADFS。”您的意思是“重要的是要注意几乎所有这些应用程序都是SAML2而不是WS-Fed”吗?

这些应用程序如何通过ADFS进行身份验证?你有某种第三方堆栈吗?

为什么这些应用程序有证书?是因为请求已签名或SLO已签署或是什么?

如果某些应用程序实际上不需要证书,您可以将其从元数据中删除。

答案 1 :(得分:0)

通过应用ADFS 2.0的汇总3(http://support.microsoft.com/kb/2790338

可以解决此问题

列出了已知问题和Hot Fix。特定于Salesforce,我们得到以下问题(在汇总3中描述);

  

某些依赖方要求应用签名证书   向SAML请求的依赖方作为签名证书   提供关键的安全验证功能,并在中定义   SAML 2.0规范。 AD FS 2.0能够实现独特性   签名证书应用于依赖方信任,但它   只允许将同一证书应用于一个依赖方   每个AD FS 2.0服务器场的信任。此限制可防止多次依赖   各方使用相同的签名证书进行SAML请求。广告   FS 2.0更新汇总3删除此限制并允许多个   依赖方为SAML请求使用相同的签名证书。

注意:应用更新汇总3后,您需要手动运行脚本(如下所述),以便解决此问题。

窗口内部数据库:

对于问题3,此修补程序将名为“PostReleaseSchemaChanges.ps1”的PowerShell脚本安装到“%program files%\active directory federation services\sql”文件夹中。

如果您使用Windows内部数据库(WID)作为AD FS 2.0配置数据库,则在应用此修补程序后,必须首先在服务器场中的辅助联合服务器上手动执行PostReleaseSchemaChanges.ps1 PowerShell脚本,然后在主联合服务器上。

注意:您可能会遇到错误“在此系统上禁用了脚本的执行”。要解决此问题,您可以尝试在powershell中运行以下命令(对于Windows Server 2008 R2):

Set-ExecutionPolicy RemoteSigned

如果您仍然遇到此问题,请参阅下面的StackOverflow帖子: PowerShell says "execution of scripts is disabled on this system."

SQL Server:

如果您使用SQL Server数据库作为AD FS 2.0配置数据库,则必须下载并执行针对SQL Server数据库的RelaxedRequestSigningCertsv2.sql脚本。

要执行此脚本,请使用Sqlcmd实用程序运行以下cmdlet: Sqlcmd -S -i RelaxedRequestSigningCertsv2.sql 或者,按照以下步骤使用SQL Server Management Studio运行cmdlet:

Connect to the SQL Server database that has the AD FS 2.0 configuration database.
Create a new SQL query.
Paste the contents of the RelaxedRequestSigningCertsv2.sql file into the query, and then execute the query.