Microsoft Dynamics 365 Customer Engagement(联机)要求 TLS 1.2 进行连接

在 Dynamics 365(联机)版本 9.x 和 Dynamics 365(online) 政府版 8.2 中,我们将开始要求连接到客户参与应用程序以利用 TLS 1.2(或更好的)安全性。 这与更新的Microsoft和行业安全策略和最佳做法保持一致,可能需要采取措施来维护与 Dynamics 365 Customer Engagement 应用程序的连接。 查看以下信息,帮助你确定你是否受到影响,以及可能需要执行哪些步骤。

适用于: Microsoft Dynamics 365
原始 KB 编号: 4051700

什么是 TLS?

TLS 代表 传输层安全性,是一种行业标准,旨在保护通过 Internet 通信的信息的隐私。 TLS 被广泛用于通过 HTTPS 和 TCP 进行通信的 Web 浏览器和应用程序。

有哪些改变?

目前,所有 Dynamics 365 Customer Engagement 联机版本都支持 TLS 1.0、1.1 和 1.2,但从 Dynamics 365 版本 9.x 和 Dynamics 365(联机)政府版 8.2 版开始,我们将开始阻止从使用 TLS 1.0 和 1.1 的客户端或浏览器连接到更新的产品。

注意

此更改仅影响 Dynamics 365 Online Customer Engagement Microsoft,而不会影响本地版本。

你或你的客户将受到怎样的影响?

如果 Dynamics 365(联机)版本 9.x 或 Dynamics 365(联机)政府版 8.2 的任何连接不使用 TLS 1.2 安全协议,则连接将失败。 这将影响多个 Dynamics 服务(下面列出),包括对 Dynamics 365 Customer Engagement Web 应用程序的访问。

你或你的客户如何避免受到影响?

对于支持的 Web 浏览器

Dynamics 365 Customer Engagement(版本 7.x - 版本 9.x)的所有 受支持的浏览器 当前都符合 TLS 1.2 标准,并将继续按以前一样工作。 但是,如果在浏览器中禁用了 TLS 1.2 协议,将受到影响并失去与组织的连接。

适用于Microsoft提供的开发人员工具

请参阅 版本 9.0 中 Customer Engagement 开发人员文档的新增功能,获取有关开发人员工具文档的最新内容。 从 NuGet 更新到 开发中使用的最新版本的工具。 开发人员工具的示例包括插件注册工具和配置迁移工具。 这些工具的版本 9.0 向后兼容,可用于 Dynamics 365(联机)版本 8.2 政府版。

对于使用 Dynamics 365 SDK 生成的代码

使用 .NET Framework 4.6.2 或更高版本重新编译客户端应用程序。 如果代码已使用 .NET 4.6.2 或更高版本进行编译,则无需执行任何操作。 对于自定义插件和工作流程序集,应继续使用 .NET 4.5.2。

Visual Studio 2015 的已知问题

在调试模式下在 Visual Studio 2015 中运行项目/解决方案时,可能存在一个已知问题,即可能无法连接到 Dynamics 365(联机)版本 9.x 或 Dynamics 365(联机)版本 8.2 政府版。 无论使用的是 4.6.2 或更高版本的目标框架,都会发生这种情况。 可能会发生这种情况,因为 Visual Studio 托管进程是针对 .NET 4.5 编译的,这意味着默认情况下它不支持 TLS 1.2。 可以禁用 Visual Studio 托管进程作为解决方法。 右键单击 Visual Studio 中项目的名称,然后单击“属性”。 在 “调试 ”选项卡上,可以取消选中“ 启用 Visual Studio 托管进程 ”选项。

注意

这只会影响 Visual Studio 2015 中的调试体验。 这不会影响生成的二进制文件或可执行文件。 Visual Studio 2017 中不会发生相同的问题。

基于 .NET 的应用的一个重要说明

可以使用以下命令强制 TLS 1.2 协议:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

这会强制 TLS 1.2 安全协议。 不建议这样做,因为当行业采用的较新的安全协议时,可能需要更新此协议。

对于无法重新编译的现有代码

可以在 Windows 上使用注册表设置,该设置将强制 .NET 利用可能最高的安全标准。

注意

这是一个计算机范围的设置,可能具有意外的影响。 建议或客户使用重新编译到 .NET 4.6.2 或更高版本的方法。

若要更新强制 .NET 4.5.2 首选 TLS 1.2 计算机的注册表设置,请记录在 Microsoft安全公告2960358 一文中。 请参阅“在运行 .NET Framework 4.5/4.5.1/4.5.2 的系统上手动禁用 TLS 中的 RC4 的建议操作”部分

对于非 .NET 软件

请与供应商联系,了解如何启用 TLS 1.2。 对于大多数语言,可以使用简单的配置条目来完成。

对于 PowerShell

在调用Get-CrmConnection之前添加到 [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 PowerShell 脚本。

For Dynamics 365 for Microsoft Outlook

Dynamics 365(联机)政府版 8.2 和 Dynamics 365(联机)版本 9.x

对于统一服务台(USD)

下载最新版本的统一服务台(版本 3.1、3.2 和 3.3 符合 TLS 1.2)。

如果想要继续使用旧版统一服务台,则需要 更新客户端桌面的注册表项

For Dynamics 365 for Report Authoring

Dynamics 365 (在线) 政府版 8.2

Dynamics 365(联机)版本 9.x

For Dynamics 365 for Email Router

Dynamics 365 (在线) 政府版 8.2

Dynamics 365(联机)版本 9.x

示例错误

下面是在使用非 TLS 1.2 安全协议时可能会遇到的一些潜在连接错误:

浏览器错误

“无法安全地连接到此页面
这可能是因为此站点所使用的 TLS 安全设置过时或不安全。 这种情况不断发生,请尝试联系网站的所有者。

连接器错误

“Microsoft.Xrm.Tooling.CrmConnectControl 信息:8:Connect 中的登录状态为 = 验证与 Microsoft Dynamics CRM 的连接...

Microsoft.Xrm.Tooling.Connector.CrmServiceClient 错误:2:从身份验证上下文请求令牌时出错

Microsoft.Xrm.Tooling.Connector.CrmServiceClient 错误:2:源:mscorlib

方法:ThrowIfExceptional

错误: 发生了一个或多个错误。

堆栈跟踪:System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)

at System.Threading.Tasks.Task'1.GetResultCore(Boolean waitCompletionNotification)

at System.Threading.Tasks.Task'1.get_Result()

at Microsoft.Xrm.Tooling.Connector.CrmWebSvc.ExecuteAuthenticateServiceProcess(Uri serviceUrl, ClientCredentials clientCredentials, UserIdentifier user, String clientId, Uri redirectUri, PromptBehavior promptBehavior, String tokenCachePath, Boolean isOnPrem, String authority, Uri& targetServiceUrl, AuthenticationContext& authContext, String& resource)

内部异常级别 1:

源:Microsoft.IdentityModel.Clients.ActiveDirectory

方法:关闭

错误: 对象引用未设置为对象的实例。

堆栈跟踪:在 Microsoft.IdentityModel.Clients.ActiveDirectory.HttpWebResponseWrapper.Close()

at Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationParameters。<CreateFromResourceUrlCommonAsync>d__0.MoveNext()

从先前引发异常的位置---堆栈跟踪的结束---

at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)

at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)

at Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationParameters。<CreateFromResourceUrlAsync>d__8.MoveNext()”

开发人员工具错误

“内部异常级别 1:

源系统:

方法:GetResponse

错误: 基础连接已关闭:发送时发生意外错误。

堆栈跟踪:System.Net.HttpWebRequest.GetResponse()

at System.ServiceModel.Description.MetadataExchangeClient.MetadataLocationRetriever.DownloadMetadata(TimeoutHelper timeoutHelper)

at System.ServiceModel.Description.MetadataExchangeClient.MetadataRetriever.Retrieve(TimeoutHelper timeoutHelper)

内部异常级别 2:

源系统:

方法:读取

错误: 无法从传输连接读取数据:远程主机强行关闭了现有连接。

堆栈跟踪:在 System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)

at System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count)

at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)”

其他信息