【问题标题】:Error with Azure service SSL in Development Fabric开发结构中的 Azure 服务 SSL 错误
【发布时间】:2023-03-14 03:20:02
【问题描述】:

我在让 SSL 在 Development Fabric 中工作时遇到了问题。我正在使用 Visual Studio 2012 Ultimate 和 2012 年 10 月 Azure SDK for .NET 运行 Windows 8 Pro 的全新安装。没有安装 IIS8,只有 IIS Express,它声称支持 HTTPS,所以我希望这不是问题。

以管理员身份运行 VS 12,我创建了一个空白 VS 解决方案,添加了一个新的 (.NET 4.5) 云服务和一个新的 ASP.NET MVC 4 Internet Web 应用程序项目,然后按 F5。一切正常。然后,当我向 Web 角色添加 SSL 证书并将 HTTP 端点(端口 80)替换为 HTTPS 端点(端口 443,带有证书)时,按 F5 会产生以下错误消息:

适用于 Microsoft Visual Studio 的 Windows Azure 工具

将调试器附加到角色实例“deployment18(32).WindowsAzureCloudService.Mvc4WebRole_IN_0”时出错,进程 ID:4892。无法附加。访问被拒绝。

请注意,最后一部分(“访问被拒绝”)有几个变体,特别令人愉快的是“灾难性故障”。 :)

VS 输出窗口中的唯一消息(“常规”输出)是:

Windows Azure 工具:警告:将角色“Mvc4WebRole”中的专用端口 443 重新映射到 444 以避免在模拟期间发生冲突。

Compute Emulator UI 帮助不大;就在实例消失之前,这是我始终如一地获得的唯一控制台输出(有时会出现其他消息,但每隔几次运行就会偶尔出现;我不知道如何捕获这些消息):

[fabric] 角色实例:deployment18(33).WindowsAzureCloudService.Mvc4WebRole.0

[fabric] 角色状态未知

[fabric] 角色状态已暂停

[fabric] 角色状态忙碌

[fabric] 角色状态不健康

[fabric] 角色状态已停止

证书是从 CA 获得的,并以 .pfx 格式正确导入本地机器/个人/证书存储,并带有私钥、扩展属性,并标记为可导出,物有所值。

当我尝试将服务发布到 Azure 时,我收到一个关于数据库连接字符串的构建(验证)警告(我认为这无关紧要):

连接字符串“DefaultConnection”正在使用项目“Mvc4WebRole”中的本地数据库“(LocalDb)\v11.0”。当您在 Windows Azure 中运行此应用程序时,此连接字符串将不起作用。要访问不同的数据库,您应该更新 web.config 文件中的连接字符串。

可能更重要的是,部署实际上失败并在 Windows Azure 活动日志窗口中显示以下历史记录:

9:00:25 AM - 警告:存在包验证警告。

上午 9:00:25 - 准备部署 WindowsAzureCloudService - 2013 年 1 月 3 日上午 8:59:55,订阅 ID 为“<...>”,使用服务管理 URL“https://management.core.windows” .net/'...

9:00:25 AM - 正在连接...

9:00:26 AM - 对象引用未设置为对象的实例。

9:00:26 AM - 部署失败并出现致命错误

有人可以帮我解决这个问题吗?我已经重新启动了几次。 ;)

提前致谢!

编辑(1 月 3 日下午 4:44):我有一些想法可能会帮助我取得进步,但有些想法非常激进,因此我们将不胜感激:

  • 有没有办法将 Compute Emulator (Dev Fabric) 的所有输出捕获到日志文件中,以便我查看它? (来自我的服务的 System.Diagnostic.Trace 调用无济于事,因为使用 HTTPS 时我什至没有达到 RoleEntryPoint!) 我想通了;请参阅下一个编辑。
  • Azure 部署期间的空指针异常让我很担心。是否值得尝试重新安装 Azure SDK,如果是,我应该如何进行全新安装?
  • 有没有人看到当模拟器切换到使用完整的 IIS 时这种问题消失了? (这似乎不太可能,因为 IIS 与 IIS Express 应该与 Azure 部署没有相关性。)

编辑(1 月 4 日上午 10:15): 坏消息:我尝试了授予对证书的读取访问权限的建议,但对我的情况没有帮助。好消息:我设法在 Compute Emulator UI 关闭之前捕获了其中一条零星消息;这是一些诊断中的一些信息。本身没有帮助,但它揭示了 Development Fabric 存储其临时文件的位置:

[诊断] 信息:C:\Users\Lars\AppData\Local\dftmp\Resources\0005155d-4592-40f4-812e-18793b26576c\directory\DiagnosticStore\Monitor

每次部署都会重新创建 GUID 部分,并在部署消失时将其删除(在我的情况下总是如此)。但是在父目录 ('dftmp') 中,我在新部署期间监视了一些有用的目录:DevFCLogs、DFAgentLogs 和 IISConfiguratorLogs。我想这回答了我昨天的第一个问题! :)

DFAgentLogs\DFAgent.log:(41KB) 没有有用的信息。一堆“读取管道失败”消息和获取角色/部署实例 ID 失败,我认为这只是噪音。

DevFCLogs\DevFabric--2013.01.04--<...>.log: (510 KB) 没有有用的信息。我浏览了文件,还搜索了“错误”、“失败”、“未找到”、“证书”和“Mvc4WebRole_IN_0”;这些都没有表明发生了什么。

IISConfiguratorLogs\IISConfigurator.log:(6 KB) 现在我们正在取得进展! :) 有人能告诉我这是什么意思吗? (与此同时,我不再寻找 ILSpy 了……好玩……)

IISConfigurator 信息:0 : [00006356:00000005, 2013/01/04 16:07:08.915] 使用 IIS Express appdomain

(...)

IISConfigurator 信息:0 : [00006356:00000005, 2013/01/04 16:07:08.936] 添加绑定 127.255.0.0:444: 到站点部署 18(40).WindowsAzureCloudService.Mvc4WebRole_IN_0_Web

IISConfigurator 信息:0 : [00006356:00000005, 2013/01/04 16:07:10.484] 捕获异常

IISConfigurator 信息:0:[00006356:00000005, 2013/01/04 16:07:10.487] 异常:System.Runtime.InteropServices.COMException (0x800401F3):无效的类字符串(来自 HRESULT 的异常:0x800401F3( CO_E_CLASSSTRING))

服务器堆栈跟踪:

在 Microsoft.Web.Administration.Interop.IAppHostProperty.get_Value()

在 Microsoft.Web.Administration.ConfigurationElement.GetPropertyValue(IAppHostProperty 属性)

在 Microsoft.Web.Administration.Binding.get_CertificateHash()

在 Microsoft.Web.Administration.BindingCollection.Add(绑定绑定)

在 Microsoft.WindowsAzure.ServiceRuntime.IISConfigurator.WasManager.DeploySite(String roleId, WASite roleSite, String appPoolName, String sitePath, String iisLogsRootFolder, String failedRequestLogsRootFolder, List1 bindings, List1 协议, FileManager fileManager, WAAppPool defaultAppPoolSettings, String roleGuid, String& appPoolSid, List`1 appPoolsAdded, String configPath)

编辑(1 月 4 日,上午 11 点): ILSpy 没有太大帮助;在尝试获取证书的哈希以设置绑定(我们也知道)时,在互操作点抛出异常(我们已经知道)。有谁知道需要注册什么 COM 对象才能获得 Microsoft.Web.Administration 中绑定的证书哈希?或者我如何拦截互操作调用以找出答案?如果您能首先告诉我为什么会发生这种情况,则可以加分。 :)

【问题讨论】:

  • 你在什么操作系统上运行这个?
  • 用可能的解决方案更新了我的答案
  • 谢谢,我试试看!我已经完成了 VS12 的修复安装,因此重新安装 Azure SDK 将是我的下一步。不过,在执行步骤 2-10 之前,我将推迟使用完整的 IIS;无论哪种方式,我都会告诉你进展如何。

标签: azure visual-studio-2012 azure-web-roles azure-sdk-.net


【解决方案1】:

我在两台电脑上遇到过类似的问题。在这两种情况下安装 IIS 解决了问题

只需安装 IIS(通过添加/删除 Windows 组件)似乎就足够了。您无需开始使用它。安装发生了一些变化,之后我的 IIS Express 再次开始使用 Visual Studio 中的 HTTPS。

在 MSDN Social 上有类似问题的讨论: http://social.msdn.microsoft.com/Forums/nl-NL/windowsazuredevelopment/thread/ad362016-16f6-459a-8022-9307aa5f910e Microsoft connect 上也提出了这个问题: https://connect.microsoft.com/VisualStudio/feedback/details/758533

在我的情况下,日志文件中的错误是:

IISConfigurator 信息:0 : [00007644:00000007, 2013.01.17 00:39:18.523] 异常:System.Runtime.InteropServices.COMException (0x800401F3):无效的类字符串(HRESULT 异常:0x800401F3 (CO_E_CLASSSTRING))

我从 C:\Users\\AppData\Local\dftmp\IISConfiguratorLogs 目录中找到了日志文件。

【讨论】:

  • 这也为我解决了(安装 IIS)。我尝试了一切,包括购买 8 美元的证书、通过 selfsignedcertificate.com 生成证书、在本地机器/个人和本地机器/受信任的根存储、当前用户/个人和当前用户/受信任的根存储中安装 IIS Express 开发证书,生成我的 Apple Keychain 工具中的自签名证书并再次将其安装在 Windows 证书存储中,通过从远程桌面连接到我的 Azure 2012 Server IIS 管理器生成自签名证书。等等等等。
【解决方案2】:

当使用 SSL 的私钥证书在本地运行时,您需要向用户提供正在运行的模拟器应用程序,该用户可以访问该私钥。打开 mmc.exe 并添加证书 >> 本地计算机管理单元以查看您的证书。右键单击证书,然后单击所有任务>>管理私钥-然后添加至少具有读取权限的 IUSR 和网络服务。

要部署到 Azure,您需要将证书上传到云服务并确保证书对域有效。

http://www.microsoft.com/en-us/download/details.aspx?id=35448 执行第 11 步。从这个SO post

【讨论】:

  • 好吧,那没用,但感谢您让我知道证书的 ACL。我没有意识到那些存在(事后看来很明显:))。我添加了权限,甚至重新启动,但没有成功。我已经将证书上传到 Azure 并验证了证书。
  • 我使用的是 Windows 7 企业版,无法复制,今晚我将试用我的 2 个 Windows 8 机器
  • 不需要;我刚刚重新安装了 Azure SDK(没有帮助)并按照您链接到的说明中的步骤 11 进行操作(即使没有将项目设置为使用完整 IIS)。非常感谢!
  • 就发布过程中的“对象引用未设置为对象的实例”错误而言,我无法追踪它,但通过重新创建云服务和 Web 应用程序项目来摆脱它从头开始。
猜你喜欢
  • 2018-01-27
  • 2020-10-31
  • 2020-09-16
  • 2017-09-21
  • 2019-03-22
  • 2015-12-04
  • 1970-01-01
  • 2020-04-23
  • 2018-07-23
相关资源
最近更新 更多