3

我尝试使用 keytool 将证书从 First Data 导入到我的 ColdFusion 9 设置中,如下所示:

keytool -importcert -keystore MYCF9Dir\runtime\jre\lib\security\cacerts -trustcacerts -alias firstdata -file FirstData.pem

导入似乎有效,但是当我通过任何 ColdFusion 函数或标记访问 WSDL 时,它会引发“I/O 异常:收到致命警报:handshake_failure”。这告诉我它无法使用它拥有的证书访问该站点,或者找不到它。

那么,我是否正确导入了证书?如果我是,我还能如何使用 ColdFusion 访问此 WSDL?

4

3 回答 3

0

我有一个类似的问题,以防万一有人面临同样的问题,这就是我解决我的问题的方法。我有一个 .pem 文件,这表明它已成功导入到 ColdFusion 中的 Cacert 密钥库中,但我试图访问的远程 API(服务器)由于某些原因无法识别证书。所以我首先使用 OpenSSL 将 .pem 证书转换为 PKCS12 格式文件 - 此链接有帮助:http ://cc.in2p3.fr/docenligne/84/en#0.4 (在底部)。然后我使用了 CFHTTP CF 标签,如下所示:

        <cfhttp
        url="https://urlToAPI"
        method="POST"
        clientCert="path to the file (.p12)"
        clientCertPassword="password"
        result="result">             

这为我做到了。我希望它可以帮助某人。

于 2015-01-08T11:55:55.920 回答
0

当我与 Java 集成时,我遇到了同样的问题。虽然我不确定你会在 ColdFusion 中做什么,但我想这可以为你指明正确的方向。

为避免此问题,您需要先创建 SSLContext 并将其手动呈现给 firstdata 服务器,然后才能执行其他任何操作。

在Java中,这就是我所做的:

KeyStore ksjks = KeyStore.getInstance(KeyStore.getDefaultType());
ksjks.load(new FileInputStream("/path/to/your/p12/file"),"password".toCharArray());

KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ksjks, "password".toCharArray());

SSLContext sslContext = SSLContext.getInstance("SSLv3");
sslContext.init(kmf.getKeyManagers(), null, null);

SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();

您将在客户端中使用此上下文,如下所示:

URL url = new URL("serverUrl");
HttpsURLConnection urlConn = (HttpsURLConnection) url.openConnection();
urlConn.setSSLSocketFactory(sslSocketFactory);

希望对您有所帮助。和平!

于 2011-12-20T22:06:23.327 回答
0

您是否考虑过使用 .crt 文件而不是 .pem 文件?我刚用

keytool -importcert -keystore C:\Coldfusion9\runtime\jre\lib\security\cacerts -trustcacerts -alias myserver -file myserver.crt

现在它工作得很好。

希望这可以帮助。

于 2011-07-08T01:17:24.787 回答