#coldfusion #wsdl #certificate #keytool #firstdata
#coldfusion #wsdl #сертификат #keytool #firstdata
Вопрос:
Я попытался импортировать сертификат из First Data в свою программу установки ColdFusion 9, используя keytool следующим образом:
keytool -importcert -keystore MYCF9Dirruntimejrelibsecuritycacerts -trustcacerts -alias firstdata -file FirstData.pem
Импорт, кажется, работает, однако, когда я обращаюсь к WSDL через любую функцию или тег ColdFusion, он выдает «Исключение ввода-вывода: получено фатальное предупреждение: handshake_failure». Который сообщает мне, что он не может получить доступ к сайту с имеющимися у него сертификатами или не может его найти.
Итак, я правильно импортирую сертификат? И если да, то как еще я могу получить доступ к этому WSDL с помощью ColdFusion?
Комментарии:
1. Вы перезапускали сервер ColdFusion после импорта сертификата? Вы также можете использовать certman.riaforge.org для облегчения импорта сертификатов
2. Да, я перезапустил сервер после импорта сертификата
3. можете ли вы использовать cfhttp для любого содержимого с сайта, на котором размещен wsdl?
4. Ничего, что использует https, похоже, это только защищенный сервер. Добавление сертификата в Windows позволяет мне попасть на сайт с помощью Internet Explorer, но не Firefox.
5. На самом деле у меня была такая же проблема на прошлой неделе, и я не смог ее решить. Их техническая поддержка, хотя и приятная, была не очень полезной. Однако я не импортировал с помощью keytool. Я импортировал сертификат в Windows и использовал какую-то вещь winhttpcert, которую они упомянули в своих инструкциях. Может быть, если вы выполните оба шага, это сработает?
Ответ №1:
Рассматривали ли вы возможность использования файла .crt вместо файла .pem? Я только что использовал
keytool -importcert -keystore C:Coldfusion9runtimejrelibsecuritycacerts -trustcacerts -alias myserver -file myserver.crt
И теперь это работает просто отлично.
Надеюсь, это поможет.
Ответ №2:
У меня была такая же проблема, когда я интегрировался с 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);
Надеюсь, это вам поможет. Мир!
Ответ №3:
У меня была похожая проблема, и на всякий случай, если кто-то сталкивается с такой же проблемой, вот как я решил свою. У меня был файл .pem, и это показывало, что он успешно импортирован в хранилище ключей Cacert в ColdFusion, но удаленный API (сервер) Я пытался нажать, не распознал сертификат по некоторым причинам. Итак, я первым делом преобразовал сертификат .pem в файл формата PKCS12 с помощью OpenSSL — помогла эта ссылка: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">
Это сделало это за меня. Я надеюсь, что это кому-то поможет.