我正在使用以下 PowerShell 代码创建可用作 Always Encrypted 功能的列主密钥的证书:
New-SelfSignedCertificate -Subject "AlwaysEncryptedSecurityLevelNormalV001" -CertStoreLocation Cert:LocalMachineMy -KeyExportPolicy Exportable -Type DocumentEncryptionCert -KeyUsage KeyEncipherment -KeySpec KeyExchange -KeyLength 2048 -NotAfter (Get-Date).AddYears(100)
然后我导出证书并将其导入到运行 SQL Server 的机器中。在导出过程中,我禁用了导出证书私钥的选项。因此,如果有人尝试导出它,他/她将得到以下信息:
这很好,因为证书私钥受保护以供导出。
我想知道在 Always Encrypted 功能的上下文中是否存在我可能只需要导出没有私钥的证书的情况(作为此证书的工作,它仅保护列加密密钥)?
如果运行 SQL Server 的服务器也具有解密所有数据的证书,那么这就违背了使用 Always Encrypted 的目的。
拜托,拜托,请不要这样做!将其放在客户端机器或“工具”或“中间加载”机器上以获取数据的输入和输出。然后删除密钥并仅将其保存在锁定的客户端计算机上。
我还会在您的脑海中保留一个解决方案,以解决客户端计算机丢失/被盗/破坏(笔记本电脑)或服务器受到威胁的情况。你怎么知道的,你必须轮换 CMKs 多长时间,你知道如何轮换 CMKs 等等。
私钥是保证一切安全的东西,所以没有私钥就无法解密。我想不出这在什么时候有用。