当Windows Mobile应用程序(.NET 3.5)尝试使用IIS上托管的Web服务(也是用.NET 3.5编写)时,我们有一个现有的证书(全局标志)可以正常工作。
然而,当我们重新颁发证书(全局标志)时,Windows Mobile应用程序无法连接到Web服务,我们得到的错误是"无法建立信任关系使用远程服务器" 。我曾尝试在Google上多次搜索此内容,但未找到合适的解决方法。
我们还尝试将链中的ROOT和中间证书复制(并安装)到设备,但这仍然无效。
当我们使用PC网络浏览器(IE,Firefox,Opera)测试新证书时,使用Web服务(.NET 3.5)的桌面应用程序,甚至是Windows Mobile设备上的Internet Explorer .NET Web服务定义/文档页面显示没有问题(没有警告或错误),当使用紧凑框架(3.5)应用程序尝试使用Web服务时,它似乎只是Windows移动设备上的一个问题。
我们已经验证证书是在SSL购物者网站上正确安装的,在我们的谷歌搜索之后,我们遇到并实施(作为测试)a"信任所有" ICertificatePolicy处理程序,这解决了这个问题,但是我希望通过配置/设置更改来解决这个问题,而不是代码更改和超过150个基于Windows移动设备的重新部署。
ICertificatePolicy管理员确实显示了在尝试验证证书时返回的错误:问题参数设置为:-2146762481(HEX中为0x800B010F),我认为这是" CN No MATCH&# 34;错误,但我已经用它的数字,十六进制和名称形式搜索了这个,并且还没有找到除了"信任所有"之外的解决方案。代码更改。
答案 0 :(得分:7)
我想我会在这里发布答案以防其他人遇到这个问题。我没有找到100%坚如磐石的解释,但我们已经设法让它发挥作用,这让我想出了一个关于问题的假设:
似乎紧凑框架似乎是从SSL证书的“主题名称替代”字段中取出第一个公共名称(CN),并且仅在完整框架的同时评估证书,移动设备上的IE和IE似乎都在使用它们。我相信这一点的理由如下:
PDA应用程序正在访问网址:
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