IIS 重新启动后 JWKS 更改
Posted
技术标签:
【中文标题】IIS 重新启动后 JWKS 更改【英文标题】:JWKS changes after IIS restart 【发布时间】:2021-12-18 10:59:48 【问题描述】:我们正在使用 OpenIddict,我们添加了加密证书和签名证书。我们遇到的问题是,当 IIS 重新启动 /well-known/jwks 上的密钥更改时,其他项目如果没有再次重新启动,则 jwks 密钥错误,然后抛出 401 未授权。服务器重启时可以在/.well-known/jwks中使用固定键吗?
【问题讨论】:
【参考方案1】:如何添加签名证书?它存储在 IIS 之外的什么位置?
如果您使用 AddSigningCredential(...) 并确保签名证书相同,则 JWKS 密钥不应更改。
【讨论】:
我们正在使用options.AddSigningCertificate,它是一个自签名证书,就像openiddict文档说的那样。我们将导出的证书存储为 xml 文件并使用 DPAP(Windows 数据保护 api)将其加密保存以读取证书我们解密证书并将私钥导入 X509Certificate2。用于签名和加密证书 你确定你没有在某处使用 AddDeveloperSigningCredential 吗?另外,请比较磁盘上的签名密钥/证书的详细信息和 JWKS 中的详细信息,您确定您在 JWKS 中获得的实际上与磁盘上的相同吗? 是的,确定我没有使用 AddDeveloperSigningCredential 我们正在使用 options.AddSigningCertificate 在本地机器上工作正常,如果我像字节数组一样保存它,但是对于生产服务器不工作但这是我的另一个问题认为 读取此证书的问题是在目标机器上创建的,它没有被目标机器读取。它说:WindowsCryptographicException:指定的网络密码不正确。我添加了这个: new X509Certificate2(unProtectedData,"", X509KeyStorageFlags.MachineKeySet);但不会改变同样的错误 也许在生成时设置了密码,在读取时使用相同的密码?但是“指定的网络密码”错误可能是文件系统错误?您的证书在网络驱动器上吗?而不是本地磁盘?【参考方案2】:解决了问题 1 - 像字节数组一样导出证书 2 - 使用 DPAPI 加密字节数组 3 - 将加密的字节数组保存到文件中 然后证书可以恢复正常,重启后jwks不会改变
【讨论】:
以上是关于IIS 重新启动后 JWKS 更改的主要内容,如果未能解决你的问题,请参考以下文章
如何在 IIS 7.5 中配置应用程序池在停止时自动重新启动?