ssl - ADFS - 无法设置 SSL 证书
问题描述
我正在尝试创建一个测试 ADFS 环境,但 ADFS 配置一直失败。打开详细日志记录后,我可以看到 SSL 证书存在问题。证书已导出私钥。事件错误如下: Event Id: 12 关键字:ADFSConfiguration
我尝试使用 PowerShell 设置 adfs 证书,但出现以下错误”
PS C:\Users\user> Set-AdfsSslCertificate -Thumbprint 'thumbprint' Set-AdfsSslCertificate : 通信对象 System.ServiceModel.Channels.ServiceChannel 不能用于通信,因为它处于故障状态。在行:1 字符:1
- 设置-AdfsSslCertificate-Thumbprint '1F7C1402E211642287AAA3C04ED242FE3 ...
-
+ CategoryInfo : NotSpecified: (:) [Set-AdfsSslCertificate], CommunicationObjectFaultedException + FullyQualifiedErrorId : System.ServiceModel.CommunicationObjectFaultedException,Microsoft.IdentityServer.Managem ent.Commands.SetSslCertificateCommand
请帮忙。
谢谢!
解决方案
我遇到了同样的问题,我花了一段时间才弄清楚如何创建新证书。答案很简单。
首先,您需要将域控制器的日期设置为证书仍然有效的日期。为此,您需要停止服务“w32time”,否则您无法在域控制器上设置日期。您可以在此处找到更多信息。
以管理员身份打开 cmd 并输入以下命令:
net stop w32time
现在打开您的日期和时间设置,并将日期设置为证书仍然有效的日期。
现在启动 AD FS 服务。它应该毫无问题地开始。可以肯定的是,我建议在执行下一步之前等待几分钟。
再次启动“w32time”服务,以便域控制器再次获得正确的时间。您会看到 AD FS-Service 仍在运行。
net start w32time
必须等到系统再次找到正确的时间,否则证书将在过去创建。
以管理员身份打开 Powershell 并键入以下命令:
Set-ADFSProperties -CertificateDuration 1095
这将新生成的证书的有效期设置为 3 年。(这不是必需的,但在这种情况下可能会有所帮助 - 默认值为 365 天)您可以选择使用以下命令设置证书生成阈值:
Set-ADFSProperties -CertificateGenerationThreshold 30
这将使证书在旧证书到期前 30 天自动更新。
使用以下命令,您可以设置证书升级阈值:
Set-ADFSProperties -CertificatePromotionThreshold 25
通常新生成的证书将被创建为“次要”证书。使用此命令,它们将在 25 天后升级为“主要”证书,并将按原样使用。
另一个可选设置是证书关键阈值设置,如果 AD FS 服务由于某些恶意原因无法创建或提升新证书,则会启动该设置。以下命令将在旧证书到期前的天数内执行此操作。默认值为 2 天,这完全没问题。
Set-ADFSProperties -CertificateCriticalThreshold 2
最后但并非最不重要的一点是激活证书的自动翻转,因此问题基本上不会再出现,并且证书会自动更新。
Set-ADFSProperties -AutoCertificateRollover $true
现在在 Powershell 中使用以下命令更新证书。
Update-ADFSCertificate -Urgent
您可以在以下网站上找到有关此程序的更多信息。
现在打开您的 ADFS 管理器并转到“服务 -> 证书”。在那里你会找到所有 3 个证书。如果其中之一为空、过期或丢失,您可以在正确的站点上的操作下设置新的。将所有 3 个证书设置为新证书后,重新启动您的 adfs 服务。如果它恢复正常,请重新启动您的服务器。
当您的系统启动时,该服务应该立即启动。
现在您可以测试您的 AD FS 服务是否正常工作。我不确定这是否是解决此问题的正确方法,但我可以保证这为我解决了问题。
如果某些应用程序不起作用,请检查他们是否需要了解证书更改。(例如 GitLab)在某些情况下,浏览器缓存也可能是一个问题,因此您需要清除它。甚至某些应用程序的缓存也可能带有错误的证书,因此可能需要重新启动应用程序(两种缓存方案都不应该是这种情况,但它们可能是)。
推荐阅读
- php - 使用 simplexml_load_string() 解析 XML
- python-3.x - python加速一个简单的函数
- android - 在 android mvvm 中处理导航
- shopify - 如何使用for_loop将字符串分配给变量?
- linux - 如何使用 wget 自动下载 Instagram 页面
- r - 将日期时间列拆分为 R 中的部分
- c++ - 模板的定义必须先从模块中导入才需要
- python - 根据颜色值将多维 Numpy 数组转换为二维数组
- python - Plesk Django .py 文件显示在浏览器中。我怎样才能让它安全?
- javascript - GroupBy 在 Javascript 中使用 Lodash 或 Underscore 的多列