我想从一个网站上抓取数据,其他 https 网站可以工作,这个上周工作但现在失败了
<cfhttp url="https://www.cliftoncameras.co.uk/all-brands-and-types-of-used-cameras/"></cfhttp>
如果我运行 cfhttp 转储
Exception: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
我已尝试使用最新的 JRE 版本 12 运行 - 没有变化
https://helpx.adobe.com/coldfusion/kb/import-certificates-certificate-stores-coldfusion.html
恢复为 CF 原始 JRE,下载目标 SSL 证书并使用 key 工具安装它 - 无变化
c:\ColdFusion2018\jre\bin\keytool -import -keystore cacerts -alias cliftoncameras -file c:\ColdFusion2018\jre\lib\security\cliftoncameras.cer
我将 CFAdmin 中的 websocket 更改为代理 - 无变化
我确实每次都重新启动了 CF 应用程序服务器。
我还能做什么?
最佳答案
我之前也曾在 Java 和 Coldfusion 网站上看到过这个 java.security.cert.CertPathBuilderException
错误,这些网站在常规浏览器中加载正常,但即使在将证书添加到之后,cfhttp 仍然会出错CF keystore 并重新启动。
当目标站点服务器证书配置存在信任链问题时会发生这种情况 - 当一个或多个信任链路径要求浏览器执行证书的“额外下载”时。这可能是因为在单个信任链路径中缺少中间证书,或者是因为信任链中有多个具有不同指纹的分支,并且来自这些分支中的一个或多个分支的一个或多个证书没有被提供。
如果您通过 SSL 分析器(如 ssllabs.com)运行目标站点 - 例如
https://globalsign.ssllabs.com/analyze.html?d=www.cliftoncameras.co.uk&hideResults=on - 你会看到他们的中间证书 Starfield Secure Certificate Authority - G2
没有由他们的服务器提供服务,这迫使客户端进行“额外下载”——这对最合适的浏览器,但 cfhttp 使用的 Java 客户端需要服务器直接提供几乎所有中间证书和根证书。直到几年前,对于大多数移动操作系统来说,它曾经是相同的。
因此,理想的解决方案是联系 cliftoncameras 并让他们的服务器管理员安装正确的 Starfield Intermediate 证书,以便正确提供服务。
您可能的解决方法是在您的 CF keystore 中安装 Starfield Secure Certificate Authority - G2
中间证书。
关于coldfusion - CFHTTP 无法找到请求目标的有效证书路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62041842/