首页 > 解决方案 > Azure 云服务无法从本地计算机找到证书

问题描述

我们的 API 通过 Azure 云服务(Web 角色)公开。我们使用上传到云服务的证书来加密存储在后端的数据。在证书轮换期间,我们通过更新 *.CSCFG 文件上传了新证书

我们的 CSCFG

<Certificate name="encryptcertificatethumbprint" thumbprint="NewThumbprint" thumbprintAlgorithm="sha1" />

当我们登录到 Portal > Cloud Service > Certificates 选项卡时。我们可以看到旧证书和新证书。

不幸的是,后端系统中的一些记录没有用新的旋转证书重新加密。当我们的应用程序从后端系统读取数据时,它无法解密并显示消息“无法解密秘密。请检查是否安装了序列号为'XXXXX-XXX'的证书。内部加密异常:'Keyset不存在”自旧webrole 实例中不存在证书。

我们没有使用两个证书进行另一次部署,而是远程进入 Web 角色实例并在 Personal > Certificate 下安装旧证书

在此处输入图像描述

安装旧证书后,应用程序仍然无法在本地计算机证书存储中通过指纹找到证书。我们尝试重新启动 webrole,但应用程序仍然无法选择证书。

几个问题,任何人都可以帮忙(没有任何部署来解决这个问题)

  1. webrole 实例上的证书位置是什么,我们可以在其中上传证书。我们的证书搜索逻辑基于 LocalMachine 中的序列号,然后是当前用户。虽然我们在 LocalMachine 中上传了证书,但仍然无法获取证书
  2. 当前用户证书存储区是什么,即运行 webrole 的帐户是什么
  3. 如果证书过期,证书会被退回吗?

标签: azureazure-cloud-services

解决方案


我没有尝试实现您的具体目标,但这些信息可能会帮助您更接近。

Azure 来宾代理将证书作为系统帐户安装在 CurrentUser 存储中,因此您想要与这些证书进行的任何交互都需要作为系统帐户。为此,您可以下载 Sysinternals Suite 并运行 psexec 以在系统上下文下启动 cmd 提示符。然后在新的 cmd 提示符下,您可以运行 certutil、mmc.exe 等:

psexec -i -d -s cmd
certutil -store -user My

您应该知道,无论您做什么(即安装新证书)都是暂时的。

  1. 有关何时重建 Windows 分区(D 驱动器)的信息,请参阅https://docs.microsoft.com/en-us/archive/blogs/kwill/windows-azure-disk-partition-preservation ,这意味着您将丢失您的手动安装的证书。
  2. 意外的角色回收(即 WaHostBootstrapper 退出或 WaIISHost/WaWorkerHost 崩溃)将导致来宾代理卸载然后重新安装所有证书。

推荐阅读