我有一个长期存在的 Azure 云服务项目,用于将 Web 和辅助角色从 Studio 部署到 Azure。云服务定义和云配置文件包括有关已上传到云服务的证书的信息。因此,在服务定义中:
<Certificates>
<Certificate name="cert" storeLocation="LocalMachine" storeName="My" />
<Certificate name="encryption" storeLocation="LocalMachine" storeName="My" />
</Certificates>
并在服务配置中:
<Certificates>
<Certificate name="cert" thumbprint="[hidden]" thumbprintAlgorithm="sha1" />
<Certificate name="encryption" thumbprint="[hidden]" thumbprintAlgorithm="sha1" />
</Certificates>
很长一段时间以来,我一直将这些配置和证书发布到同一个云服务,没有任何问题。
现在,我刚刚升级到 Visual Studio 2010 sp1 的 Azure 1.7 SDK(2012 年 6 月)。一旦我升级了我的云服务项目 [在属性中,单击“升级”],由于明显的证书错误,我不再能够部署:
下午 1:25:28 - 正在连接... 下午 1:25:33 - 错误:证书:带有指纹的“证书”:用于角色:My.Web 尚未上传到云服务:我的测试 NC。下午 1:25:33 - 错误:证书:带有指纹的“加密”:角色:My.Web 尚未上传到云服务:My Test NC。
请注意,错误中根本没有列出指纹 - 出于安全目的,我没有在此处删除它。
如果我编辑项目文件并且除了将 1.7 更改为 1.6 之外没有任何其他更改,则 Studio 的部署再次完美运行。
Visual Studio sp1 和 Azure 1.7 似乎存在一些问题,但我没有发现任何其他人有类似问题的证据。
更新:我刚刚和微软谈过,我们现在至少对复制步骤很清楚:
- 必须有多个服务配置(例如“开发”和“测试”)
- 不同的环境必须有不同的证书(因此有不同的指纹)。
由于可能不想将生产证书存储在开发机器上(尤其是因为人们不希望开发机器能够解密加密的生产值 - 例如,考虑一下,如果开发笔记本电脑丢失了),不同的证书在不同的环境中似乎符合标准的最佳实践。
因此,在这一点上,微软将考虑这是否是需要解决的问题。同时,Azure 1.7 SDK 的解决方法是:(1)不要使用 Studio 的“发布”;(2) 不要使用多个服务配置;或(3)在所有环境中使用相同的证书(不是我个人推荐的)。