Импорт первого сертификата данных в ColdFusion
Я попытался импортировать сертификат из First Data в мою настройку ColdFusion 9, используя keytool следующим образом:
keytool -importcert -keystore MYCF9Dir\runtime\jre\lib\security\cacerts -trustcacerts -alias firstdata -file FirstData.pem
Импорт, кажется, работает, однако, когда я получаю доступ к WSDL через любую функцию или тег ColdFusion, он выдает "Исключение ввода-вывода: получено фатальное предупреждение: handshake_failure". Что говорит мне, что он не может получить доступ к сайту с имеющимися сертификатами или не может его найти.
Итак, правильно ли я импортирую сертификат? И если я, как еще я могу получить доступ к этому WSDL с ColdFusion?
3 ответа
Вы рассматривали возможность использования файла.crt вместо файла.pem? Я просто использовал
keytool -importcert -keystore C:\Coldfusion9\runtime\jre\lib\security\cacerts -trustcacerts -alias myserver -file myserver.crt
И теперь это работает просто отлично.
Надеюсь это поможет.
У меня была похожая проблема, и на случай, если кто-то столкнется с той же проблемой, я решил эту проблему самостоятельно. У меня был файл.pem, и это показывало, что он успешно импортирован в хранилище ключей Cacert в ColdFusion, но удаленный API(сервер), на который я пытался попасть, не распознавал сертификат по некоторым причинам. Поэтому я сначала преобразовал сертификат.pem в файл формата PKCS12 с помощью OpenSSL - эта ссылка помогла: http://cc.in2p3.fr/docenligne/84/en (внизу). Затем я использовал тег CFHTTP CF, как показано ниже:
<cfhttp
url="https://urlToAPI"
method="POST"
clientCert="path to the file (.p12)"
clientCertPassword="password"
result="result">
Это сделало это для меня. Надеюсь, это кому-нибудь поможет.
У меня была такая же проблема при интеграции с Java. Хотя я не уверен, что вы будете делать в ColdFusion, но я думаю, что это может указать вам верное направление.
Чтобы избежать этой проблемы, вам нужно будет создать SSLContext и представить его на первый сервер данных вручную, прежде чем делать что-либо еще.
На 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);
Надеюсь, это поможет вам. Мир!