列出订阅操作:403禁止访问。

4
我正在调用Azure REST列表订阅操作

在我的开发机器上,我已将证书安装到“当前用户\个人”中。我可以成功调用API并获得响应。响应代码为200。

在测试环境中,我已将相同的证书安装到“当前用户\个人”中。但是我无法调用API。我收到403禁止访问的错误。完整错误如下:

<Error>
    <Code>AuthenticationFailed</Code>
    <Message>The server failed to authenticate the request.
    Verify that the certificate is valid and is associated with this subscription.
    </Message>
</Error>

所以我检查了证书,它是有效的,从今天早些时候开始(因为今天导入),到2040年1月有效。所以我认为它是有效的?
问题: 1. 相同的代码/项目/服务在我的本地机器上可以工作,但是在测试环境中却不能工作。为什么? 2. 证书指纹相同,证书也相同。该证书与订阅Azure帐户相关联,因为它在本地可以工作!为什么? 3. 我还应该检查什么?我知道本地和测试环境都将证书附加到Web请求上(通过详细日志了解),但在下面的位置: HttpWebResponse webResponse = webRequest.GetResponse() as HttpWebResponse; 我收到403禁止错误。
这件事让我失去理智。
更新: 在Fiddler中查看响应时,响应的开头是:
HTTP/1.1 403 Forbidden
Content-Length: 294
Content-Type: application/xml; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
Date: Fri, 27 Sep 2013 02:49:59 GMT

现在我在想日期部分是否有问题。我记得读到过日期必须在请求的15分钟之内。在测试盒中,当前时间是12:49pm,因此似乎返回的日期“超前”了2个小时。这可能是原因吗?还是这个响应只是Fiddler对日期的解释?


403错误通常意味着证书存在问题。根据您之前发布的另一个帖子,我记得您在测试框中遇到了证书问题。您可以在测试框上创建一个全新的证书,而不是从开发框导入,并使用该证书进行API请求的身份验证。 - Gaurav Mantri
是的,我曾考虑过这样做,但是该框已经被锁定,而且未安装makecert。 - andrewb
再想一个办法——在其他机器上创建证书,然后像在测试机器上那样将其导入到开发机器上。这样,您就可以在开发机器上重新创建测试环境(至少在证书方面)。另外,不确定您的测试机器是否安装了IIS,但您也可以使用IIS创建证书。 - Gaurav Mantri
我成功在开发环境中安装了makecert,创建了一个证书,将其上传到Azure并运行服务。但仍然收到403禁止访问的错误。 - andrewb
这真是太奇怪了。我甚至尝试通过更改计算机的日期/时间,一切都正常工作。只是顺便提一下:您是否考虑使用发布设置文件来实现您的解决方案? - Gaurav Mantri
我遇到了同样的问题。一开始我以为是因为一个过期的证书(2012年)导致的,这个证书一直到现在都能用,所以我创建了一个新的证书,但是这并没有帮助解决问题...它突然间就停止工作了 :( - SeriousM
1个回答

1
从我的开发机器以PFX格式导出证书和私钥,然后在生产机器上导入该PFX证书解决了我的身份验证/证书问题。

Azure只允许使用.cer文件,如何处理PFX文件? - Anuj Pandey
是的,对于Azure,您只需上传.CER文件(Azure>设置>管理证书)。在我的回答中,我指的是与Azure通信的服务器设置 - 在那里,我必须安装正确的证书才能使其正常工作。 - ueberboss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接