gpt4 book ai didi

azure - 带有证书的 HttpRequest 在 Azure Web 角色中失败

转载 作者:行者123 更新时间:2023-12-03 01:55:09 25 4
gpt4 key购买 nike

在我部署的 Azure Web 角色上,我尝试向 Web 服务器发送请求 (GET),该 Web 服务器通过请求客户端提供的证书来授权该请求。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

var filepath = Path.GetTempPath();
string certpath = Path.Combine(filepath, "somecert.cer");

Trc.Information(string.Format("Certificate at {0} will be used", certpath));

X509Certificate cert = X509Certificate.CreateFromCertFile(certpath);

WebRequest request = WebRequest.Create(endPoint);
((HttpWebRequest)request).ProtocolVersion = HttpVersion.Version10;
((HttpWebRequest)request).IfModifiedSince = DateTime.Now;

((HttpWebRequest)request).AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;

((HttpWebRequest)request).ClientCertificates.Add(cert);

上面的代码在 azure-emulator 中完美运行,但在部署时却无法运行。然后对 GetResponse 的调用总是失败。

System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.
at System.Net.HttpWebRequest.GetResponse()
at XYZ.Import.DataImport.OpenResponseStream(String endPoint)

我阅读了许多现有的讨论线程,其中使用 SecurityProtocolType.Ssl3 解决了问题,但在我的情况下却没有。考虑到它在 azure 上运行,是否还有进一步的调试选项?

更新1

我尝试了 Alexey 建议的所有调试步骤。它们确实很有帮助,但很难在 azure 上正确执行。

这是我至少两个小时后得出的结论。

我使用了这篇文章 [1] 提供的 System.Net 设置。

起初输出并不存在于预期的文件夹中。需要调整文件夹上的文件系统设置。因此,目标文件夹上应允许使用 NT AUTHORITY\NETWORK SERVICE 帐户。

之后文件没有按预期显示,因为仅提供 app.config 时似乎存在问题。请参阅此线程 [2]。因此,我提供了一个 app.config、一个 [ProjectAssembly].dll.config 和一个包含帖子 [1] 中内容的 web.config。

为了测试问题是否与用户权限有关,我使用提升的权限进行了测试,而不像帖子 [3] 中所示。

我提前将测试项目更改为以两种模式执行。第一种模式尝试加载 *.cer 文件中的公共(public)部分,如上面的代码所示。其他版本使用通过此命令加载的私有(private)证书

X509Certificate cert = new X509Certificate2(certpath, "MYPASSWORD",  X509KeyStorageFlags.MachineKeySet); 

因此,我获得了以下见解。

  1. 使用公共(public)部分 (.cer) 时,仅当权限提升且私有(private)证书导入机器存储时才有效
  2. 使用私有(private)证书 (.pfx) 时,仅当将私有(private)证书导入机器存储时才有效
  3. 即使没有提升权限,第二个设置(.pfx)也会运行

调试时,CAPI2 日志仅包含没有直接相关性的信息。上面第一点的 System.Net 诊断包含了这一点。

System.Net Information: 0 : [1756] SecureChannel#50346327 - Cannot find the certificate in either the LocalMachine store or the CurrentUser store.
[snip]
System.Net Error: 0 : [1756] Exception in HttpWebRequest#36963566:: - The request was aborted: Could not create SSL/TLS secure channel..
System.Net Error: 0 : [1756] Exception in HttpWebRequest#36963566::GetResponse - The request was aborted: Could not create SSL/TLS secure channel..

根据此输出以及使用提升权限时不断变化的情况,我推断我应该结合证书存储进一步研究正在运行的 Web 角色的权限。

[1] http://msdn.microsoft.com/de-de/library/ty48b824(v=vs.110).aspx

[2] Combined Azure web role and worker role project not seeing app.config when deployed

[3] http://blogs.msdn.com/b/farida/archive/2012/05/01/run-the-azure-worker-role-in-elevated-mode-to-register-httplistener.aspx

最佳答案

  1. 删除 SecurityProtocolType.Ssl3
  2. 打开 CAPI2 日志并检查其是否有错误(在您的本地计算机上)。
  3. 如果没有错误,请检查 CA 和中间证书的位置。
  4. 打开 system.net 诊断并检查此日志是否有错误。

this article描述如何查找并打开 CAPI2 事件日志。

希望这有帮助。

关于azure - 带有证书的 HttpRequest 在 Azure Web 角色中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24124305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com