SQL Server Always Encrypted场景下如何迁移MSSQL_CERTIFICATE_STORE证书到其他机器?
列主密钥证书迁移操作步骤
1 导出本机证书(解决CertMgr看不到证书的问题)
你在证书管理器中看不到证书,大概率是打开证书管理器的账户和你当初创建列主密钥时登录的Windows账户不一致,按以下步骤操作:
- 切换到你当初创建MyCMK1时登录的Windows账户,不要用其他账户/管理员账户打开证书管理器
- 按Win+R输入
certmgr.msc直接回车(不要选择「以管理员身份运行」),再次查看「个人/证书」路径 - 如果还是看不到,直接用PowerShell查找并导出证书,执行以下命令:
# 查找对应指纹的证书 $certThumbprint = "93DE41DC5F46FE6FF1436829B9362A508BB3E920" $cert = Get-ChildItem -Path Cert:\CurrentUser\My | Where-Object {$_.Thumbprint -eq $certThumbprint} # 导出带私钥的PFX证书,替换为你自己的导出路径和密码 $exportPath = "C:\Temp\MyCMK1_AlwaysEncrypted.pfx" $pfxPassword = ConvertTo-SecureString -String "自定义的PFX保护密码" -Force -AsPlainText Export-PfxCertificate -Cert $cert -FilePath $exportPath -Password $pfxPassword
注意:必须导出带私钥的PFX格式证书,仅导出公钥CER文件无法完成后续解密操作。
2 导入证书到目标机器
将导出的PFX文件拷贝到目标机器后,使用运行MyConsoleApp.exe的Windows账户登录目标机器,执行以下操作:
图形化导入方式
- 按Win+R输入
certmgr.msc回车打开当前用户证书管理器 - 右键点击「个人/证书」,选择「所有任务>导入」
- 选择拷贝的PFX文件,输入之前设置的PFX密码,勾选「标识此密钥为可导出的」(可选,方便后续迁移),存储位置选择「个人」存储区完成导入
PowerShell导入方式
$importPath = "C:\Temp\MyCMK1_AlwaysEncrypted.pfx" $pfxPassword = ConvertTo-SecureString -String "之前设置的PFX保护密码" -Force -AsPlainText Import-PfxCertificate -FilePath $importPath -CertStoreLocation Cert:\CurrentUser\My -Password $pfxPassword
3 配置私钥读取权限
导入完成后需要确保运行控制台应用的账户有证书私钥的读取权限:
- 在证书管理器中找到刚导入的证书,右键选择「所有任务>管理私钥」
- 在权限列表中添加运行
MyConsoleApp.exe的Windows用户,仅授予「读取」权限即可
异常排查
如果操作后仍然报错,按以下顺序排查:
- 确认导入的证书指纹和报错提示的指纹
93DE41DC5F46FE6FF1436829B9362A508BB3E920完全一致,没有多余空格或字符 - 确认控制台应用的连接字符串中仍然保留
Column Encryption Setting=Enabled;配置 - 如果你的控制台应用是以Windows服务/系统账户运行的,需要将证书导入到「本地计算机/个人」存储区,同时给对应的服务账户授予私钥读取权限
内容的提问来源于stack exchange,提问作者LHA
相关产品推荐
相关产品推荐

