5

我目前正在为 Windows Azure 的托管服务进行自动化部署过程。.cspkg和文件的创建.cscfg使用调用msbuild. 现在我正在编写一个小型 .NET 控制台应用程序,它应该使用管理 REST API 将这些文件部署到 Azure。

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

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

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

当我使用调用检索所有证书的列表时List Certificates,据说丢失的证书显然在那里。我还可以使用Get Certificate调用检索其数据。

那么为什么 Azure 在使用Upgrade Deployment调用时一直告诉我找不到证书呢?有没有人经历过类似的事情?有人我提示吗?提前致谢。

PS:这是 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>

PPS:是的,回复中的词是certitficate,不是certificate

4

3 回答 3

4

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

事实证明,我用于 API 请求的 URL 是错误的,但是:恕我直言,我责怪微软糟糕地记录了它的Azure Management API

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

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

描述如下:

要生成请求 URI,请将 <subscription-id> 替换为您的订阅 ID,将 <service-name> 替换为您的服务名称,将 <deployment-slot> 替换为 staging 或 production,并将 <deployment-name> 替换为你的部署。

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

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

于 2012-04-21T15:44:51.810 回答
0

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

于 2012-04-20T14:12:48.393 回答
0

您可以看到“400 BadRequest - 未找到带有指纹 XYZ 的证书。” 由于以下原因(我刚刚调试过),出现在 CreateDeployment 或 UpgradeDeployment 场景中:

  1. 您使用与托管服务中的 SSL 或远程桌面密码加密相同的证书进行订阅管理。因此,您将使用带有指纹 XYZ 的证书来验证创建部署的服务管理 REST 调用。
  2. 指定部署参数时,您传入 CSCFG,它通过指纹引用相同的证书,因为它需要配置远程桌面/SSL 等。
  3. 该证书尚未添加到您的托管服务证书中。

在这种情况下,400 Bad Request 错误实际上是在告诉您您有一个错误的请求,因为您的 CSCFG 中的证书尚未附加到您的托管服务。出现混淆(对我而言)是因为,由于它是一个多用途证书,您将错误消息误解为指的是请求的身份验证,即使您没有得到 401。

于 2014-01-24T16:20:54.610 回答