我必须在我的应用程序中实现密钥轮换。我有一些想法如何做到这一点,但我不确定该解决方案是否一切正常。
好的,让我们开始吧。我的应用程序中有几个地方使用 KeyVaultClient(Azure KeyVault 客户端)进行解密。它工作得很好。在我的应用程序中有一些使用 KeyVaultClient 进行加密的地方。现在(仍处于开发阶段)我正在使用硬编码参数(vaultBaseUrl,keyName,keyVersion)。但我想更进一步,将这个参数移动到 app.config 文件中。
这里的问题开始了如何处理 keyVersion 变量(我认为我可以轻松地将其余部分存储在 app.config 文件中,不是吗?)我有几个想法:
对于加密:
- 我可以将当前的 keyVersion 存储在 app.config 中,并在每次加密数据时使用这个值。
- 我可以从 KeyVaultClients 中读取所有密钥(GetKeysAsync),然后按活动标志过滤它们并按到期日期排序。最后用最新的。
对于解密:
- 我可以将用于加密的 keyVersion 存储在加密数据中(我正在转换为 Base64String 的加密结果)。我的意思是我可以在字符串结果中添加 32 个字符(keyVersion)前缀。
- 没有更多的想法,也许使用 app.config 中的 keyVersion,但它会产生密钥旋转问题。
也许有一些工具/库可以为我处理这一切?:p
目前,新密钥由管理员手动插入。在接下来的阶段中,我将为此实施计划任务。