我希望从一个网站上删除数据,其他https站点也在工作,这在上周已经开始工作,但现在失败了。
<cfhttp url="https://www.cliftoncameras.co.uk/all-brands-and-types-of-used-cameras/"></cfhttp>如果我运行cfhttp的转储
sun.security.provider.certpath.SunCertPathBuilderException:异常: PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到被请求的目标的有效证书路径
我尝试使用最新的JRE版本12 - no change运行。
https://helpx.adobe.com/coldfusion/kb/import-certificates-certificate-stores-coldfusion.html
返回到CF原始JRE,下载目标SSL证书并使用keytool - no change安装它。
c:\ColdFusion2018\jre\lib\security\cliftoncameras.cer c:\ColdFusion2018\jre\bin\keytool -import -keystore仙人掌-alias剪贴机-file -file
我将CFAdmin中的websocket更改为proxy - no changed
我每次都重新启动了。
我还能做什么?
发布于 2020-06-10 08:53:50
在我的开发平台上,我添加了
-Dcom.sun.security.enableAIAcaIssuers=true到java.args中的ColdFusion2018\cfusion\bin\jvm.config文件中
然后重新启动,现在我的CFHTTP调用成功了。
感谢@agreax提供了这个解决方案
感谢@sevroberts,尽管我无法让它工作,但答案可能是正确的。生产主机将SSL证书安装到密钥存储库,并以这种方式成功地解决了它。他们说:
--如果您使用FireFox浏览器并在浏览您希望拥有cfhttp请求访问权限的URL时单击锁图标,那么您可以获得更多信息并单击查看证书选项。您需要下载PEM (证书)而不是链。下载完之后,您需要运行keytool才能将其导入到keystore。
如果您在JVM中为ColdFusion使用默认的JRE,则需要将JDK安装到您的开发机器上。您可以看到我们在wiki上列出的关于从命令提示符将SSL导入存储区的命令的详细信息和步骤。https://wiki.hostek.com/ColdFusion_Tips_%26_Tricks#Fixing_cfhttp_Connection_Failures_with_Keytool
感谢@alexbaban他的解决方案,虽然它有效,但由于需要使用标记cfexecute,这是我无法实现的解决方案。
发布于 2020-06-01 10:13:44
我以前在普通浏览器中加载ok的站点上也看到过这个java.security.cert.CertPathBuilderException错误,但是即使在将证书添加到cfhttp并重新启动之后,cfhttp仍然有错误。
当目标站点服务器证书配置存在信任链问题时--当一个或多个信任链路径要求浏览器执行证书的“额外下载”时,就会发生这种情况。这可能是因为单个信任链路径中缺少中间证书,或者因为信任链中有多个具有不同指纹的分支,而且来自其中一个或多个分支的一个或多个证书没有得到服务。
如果您通过像ssllabs.com这样的ssllabs.com运行目标站点--比如https://globalsign.ssllabs.com/analyze.html?d=www.cliftoncameras.co.uk&hideResults=on --您将看到他们的中间证书Starfield Secure Certificate Authority - G2没有由他们的服务器提供,这迫使客户机进行“额外下载”--这对大多数正确的浏览器来说都不是问题,但是cfhttp使用的Java需要服务器直接提供几乎所有的中间证书和根证书。直到几年前,大多数移动开放源码软件都是一样的。
因此,理想的解决方案是联系剪贴机,让他们的服务器管理员安装正确的Starfield中间证书,以便正确地提供服务。
您可能的解决办法之一是在CF中安装Starfield Secure Certificate Authority - G2中间证书。
发布于 2020-06-06 14:29:00
如果您不能让keystore的功能发挥作用,也许您会想试试这个。
创建一个专用的命令行可执行文件(.exe),它将读取网页并将源代码保存到文本文件中。然后可以使用ColdFusion读取文件并处理数据。
以下是ColdFusion代码:
<cfscript>
_execPath = "c:/bin/clifton.exe";
_filePath = "c:/bin/clifton.txt";
// run your command-line app (clifton.exe)
cfexecute(name="#_execPath#");
// wait for the file
do {
sleep(100);
} while ( not fileExists(_filePath) )
// wait for write to finish
do {
sleep(100);
_fileInfo = getFileInfo(_filePath);
writeOutput(" ## ");
cfflush();
} while ( _fileInfo.size eq 0 || dateDiff("s", _fileInfo.lastmodified, now()) lte 3 )
writeOutput("<hr />")
_result = fileRead(_filePath);
writeDump(_result);
</cfscript>如您所见,它依赖于clifton.exe并读取clifton.txt (clifton.txt是执行clifton.exe的结果)。
如何使clifton.exe成为
您将使用Dart和dart2native工具在开发计算机上创建可执行文件。您可以将可执行文件部署到生产服务器上,作为一个独立的(您不需要在生产中安装Dart )。
c:\bin.
bin文件夹。https://ssl-ccp.secureserver.net/repository/?origin=CALLISTO的
sfig2.crt.pem (PEM)并保存在sfig2.crt.pem (PEM)中,创建一个文本文件clifton.dart,代码如下:H 221F 222// clifton.dart
import 'dart:convert';
import 'dart:io';
main() {
//
const String _certFilePath = 'c:/bin/sfig2.crt.pem';
const String _responseFilePath = 'c:/bin/clifton.txt';
const String _uri =
'https://www.cliftoncameras.co.uk/all-brands-and-types-of-used-cameras/';
final File _file = new File(_responseFilePath);
final IOSink _sink = _file.openWrite();
final SecurityContext _context = new SecurityContext();
_context.setTrustedCertificates(_certFilePath);
final HttpClient _client = new HttpClient(context: _context);
saveSourceToFile(_client, _uri, _sink);
_client.close();
//
}
// get web page source then write it to file
void saveSourceToFile(HttpClient _client, String _uri, IOSink _sink) {
//
_client
.getUrl(Uri.parse(_uri))
.then((req) => req.close())
.then((res) => res.transform(Utf8Decoder()).listen((data) {
// as data is received write to file
_sink.write(data);
}, onDone: () {
_sink.close();
}));
//
}dart --version测试dart的安装(您应该能够从任何文件夹运行Dart,如果需要将省道添加到您的路径中)在终端窗口中的
cd c:\bin
dart2native clifton.dart -o clifton.exe
c:\bin,您应该在c:\bin中拥有以下三个文件:clifton.dart、clifton.exe和您希望在终端窗口中测试运行的证书sfig2.crt.pem.
clifton.txt文件.
clifton.exe的ColdFusion页面,等待clifton.txt,然后输出内容.如果您在生产中部署,您需要文件clifton.exe和sfig2.crt.pem (证书)。
祝你好运!
https://stackoverflow.com/questions/62041842
复制相似问题