windows - Windows 移动 .NET 设备使用 Web 服务时出现 "Could not establish trust relationship with remote server"错误

标签 windows mobile frameworks compact-framework

当 Windows Mobile 应用程序 (.NET 3.5) 尝试使用托管在 IIS 上的 Web 服务(也是用 .NET 3.5 编写的)时,我们有一个现有的证书(全局标志)可以正常工作。

然而,当我们重新颁发证书(全局签名)时,Windows Mobile 应用程序无法连接到 Web 服务,我们得到的错误是“无法与远程服务器建立信任关系"。我曾多次尝试在 Google 上搜索此问题,但没有找到合适的修复方法。

我们也尝试过将链中的ROOT和中间证书复制(并安装)到设备上,但是仍然不行。

当我们使用 PC Web 浏览器(IE、Firefox、Opera)、使用 Web 服务的桌面应用程序 (.NET 3.5) 甚至 Windows Mobile 设备上的 Internet Explorer 测试新证书时,.NET Web 服务定义/文档页面显示没有问题(没有警告或错误),这似乎只是在使用紧凑框架 (3.5) 应用程序尝试使用 Web 服务时 Windows 移动设备上的问题。

我们已验证证书已正确安装在 SSL 购物者网站上,在我们进行谷歌搜索后,我们遇到并实现(作为测试)“信任所有”ICertificatePolicy 处理程序,这解决了问题,但我是希望这个问题可以通过配置/设置更改而不是代码更改和重新部署超过 150 个基于 Windows Mobile 的设备来解决。

ICertificatePolicy 处理程序确实显示了在尝试验证证书时返回的错误:问题参数设置为:-2146762481(十六进制中的 0x800B010F),但我认为这是“CN 不匹配”错误我搜索了它的数字、十六进制和名称形式,但除了“信任所有”代码更改之外,还没有找到解决方案。

最佳答案

我想我会在这里发布答案,以防其他人遇到这个问题。我还没有找到 100% 可靠的解释,但我们设法让它发挥作用,这让我对这个问题提出了一个假设:

紧凑型框架似乎将第一个公用名 (CN) 从 SSL 证书的“主题名称替代” 字段中移除,并且仅针对该证书评估证书,而完整框架, IE 和移动设备上的 IE 好像都在用。我相信这一点的理由如下:

PDA 应用程序正在访问 url:

https://AMobileWebService.com/Webservice.asmx

我们有效的旧 SSL 证书在“主题备用名称”中具有以下内容:
DNS 名称=AMobileWebService.com
DNS 名称=www.AMobileWebService.com

无效的新证书在同一字段中包含以下内容:
DNS 名称=www.AMobileWebService.com
DNS 名称=AMobileWebService.com

当我们更改应用程序以使用 https://www.AMobileSebService.com/Webservice.asmx ,旧证书(之前有效)未能建立信任关系,而新证书有效(但之前无效)。

正如我之前提到的,这让我相信 .NET CF 只是检索 SSL 证书中的名字,然后根据它评估 url 主机名,而不是像在完整的 .NET Framework 中那样针对两者进行评估.

我们通过实现我们在 stackoverflow 上找到的“信任所有证书”解决方案得出了这个结论: https://stackoverflow.com/questions/6552598/system-net-webexception-thrown-when-consuming-a-web-service-over-https

解决方法中的问题参数返回值 -2146762481。搜索值的十六进制表示形式 (0x800B010F) 让我找到了以下信息:https://blogs.technet.microsoft.com/rrasblog/2007/09/26/how-to-debug-sstp-specific-connection-failures/

错误原来是常量:CERT_E_CN_NO_MATCH

关于windows - Windows 移动 .NET 设备使用 Web 服务时出现 "Could not establish trust relationship with remote server"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9364690/

相关文章:

javascript - 移动 webkit 浏览器在 JS 中是否存在舍入问题?

最适合构建双向市场的 Python 框架

windows - 添加名称中带有空格的Active Directory组会在PowerShell脚本中给出错误

mobile - 使用 RequireJS 和 Backbone.js 进行页面转换

python - 编写一个脚本来运行带参数的命令

ios - React Native AsyncStorage 的位置和使用

objective-c - 从公共(public) header 引用私有(private) header

c++ - xcode 使用需要 './configure' ,'make' 和 'make install' 的外部库构建项目

Windows Git Bash shell 找不到命令?

windows - 将可能包含非 ASCII Unicode 字符的 PowerShell 输出解码为 Python 字符串