无法使用Management REST API升级Azure部署(SSL证书问题)

时间:2012-04-20 08:39:50

标签: api rest azure ssl-certificate

我目前正在为Windows Azure托管服务开展自动部署流程。通过调用.cspkg.cscfgmsbuild文件的创建工作完美。现在我正在编写一个小型.NET控制台应用程序,它应该使用Management REST API将这些文件部署到Azure。

API本身没有问题。我可以使用我的一个管理证书向API发送请求。我将.cspkg文件上传到Azure BLOB存储,然后尝试调用Upgrade Deployment。但每次我尝试时,都会收到一条“400 Bad Request”回复,指出没有找到带有指纹xy的证书。此证书是我用于自定义域(DNS CNAME)的HTTPS的SSL证书(不是管理证书)。

现在,整个事情变得有趣:

当我在Visual Studio中使用“发布”命令部署文件时,没有问题。 (我比较了来自VS和我的.cscfg输出的.cspkg / msbuild文件:除了一些GUID,它们是相同的)。此外,在浏览器中使用Silverlight Management,我甚至可以上传使用API​​无法上传的生成文件。

当我使用List Certificates调用检索所有证书的列表时,据说缺少的证书显然存在。我也可以使用Get Certificate调用来检索其数据。

那么为什么Azure在使用Upgrade Deployment电话时仍然告诉我没有找到证书?有人经历过类似的事吗?有没有人 暗示我?提前谢谢。

P.S。:这是Azure在我使用API​​时所说的内容:

<Error xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <Code>BadRequest</Code>
    <Message>The certitficate with thumbprint 7b232c4a2d6e3deadbeef120d5dbc1fe8049fbea was not found.</Message>
</Error>

P.P.S。:是的,答复中的字是certitficate,而不是certificate

3 个答案:

答案 0 :(得分:4)

好的,在使用List Subscription Operations API调用找出Visual Studio调用部署应用程序的内容后,我找到了解决方案。

事实证明,我用于API请求的网址错误,但是:得到应有的尊重,我责怪微软记录其Azure Management API

在他们的文档中,他们写下要使用的URL是:

https://management.core.windows.net/<subscription-id>/services/hostedservices/<service-name>/deploymentslots/<deployment-slot>/?comp=upgrade

描述如下:

  

要生成请求URI,请替换&lt; subscription-id&gt;使用您的订阅ID,&lt; service-name&gt;使用您的服务名称,&lt; deployment-slot&gt;使用暂存或生产,以及&lt; deployment-name&gt;使用部署的唯一名称。

他们忘记提及的是,您必须使用您服务的DNS名称不是名称!他们至少可以返回一条相应的错误消息,告诉您服务名称无效,不存在或不属于您的订阅ID,而不是抱怨某些证书问题。

谢谢微软,这花了我两天多的时间。

答案 1 :(得分:0)

该错误表示您尚未将该证书上载到托管服务的秘密存储区。 Visual Studio可能会自动为您执行此操作,但如果您想以编程方式复制它,请使用Add Certificate API调用并将PFX上载到部署中。

答案 2 :(得分:0)

你可以看到'400 BadRequest - 找不到指纹XYZ的证书。出现在CreateDeployment或UpgradeDeployment场景中的原因如下(我刚刚调试过):

  1. 您使用与订阅管理相同的证书托管服务中的SSL或远程桌面密码加密。因此,您将使用带有指纹XYZ的证书来验证创建部署的服务管理REST调用。
  2. 在指定部署参数时,您传入CSCFG,该CSCFG通过其指纹引用相同的证书,因为它需要配置远程桌面/ SSL等。
  3. 该证书尚未添加到托管服务证书中。
  4. 在这种情况下,400错误请求错误确实告诉您有错误请求,因为您的CSCFG中的证书尚未附加到您的托管服务。混淆产生(对我来说),因为,由于它是一个多用途证书,你误解了错误信息,指的是请求的身份验证,即使你没有得到401.