Я пишу интеграционные тесты для приложения Mule ESB. Приложение Mule подключается к стороннему API через HTTPS. Когда я пытаюсь запустить свое приложение против сторонней конечной точки API тестирования, все работает отлично, и мне не нужно добавлять какую-либо конфигурацию SSL к разъему HTTPS. Я считаю, что это связано с тем, что у их сервера есть сертификаты CA, поэтому они сразу же доверяют и, например, HTTP-коннектор, такой какРазъем Mule HTTPS, который доверяет всем сертификатам
<https:connector
name="my.https.connector"
cookieSpec="netscape"
validateConnections="true"
sendBufferSize="0"
receiveBufferSize="0"
receiveBacklog="0"
clientSoTimeout="10000"
serverSoTimeout="10000"
socketSoLinger="0"
doc:name="HTTPS">
<service-overrides sessionHandler="org.mule.session.NullSessionHandler"/>
</https:connector>
будет работать из коробки.
При написании интеграционного теста я заглушаю (или высмеиваю, если хотите) сторонний API. Однако для того, чтобы сделать работу SSL я должен генерировать хранилище ключей для встроенного сервера HTTPS и изменить разъем HTTPS клиента путем добавления
<https:tls-client path="keystore" storePassword="psw" />
<https:tls-key-store path="keystore" storePassword="psw" keyPassword="psw" />
как уже упоминалось во всем Интернете.
Я мог бы определить тестовый HTTPS-коннектор в отдельном XML-файле и загрузить его в методе FunctionalTestCase.getConfigResources()
. Однако это не идеально: то, что я на самом деле, это способ сделать HTTPS-коннектор (клиент) доверять всем - но только при запуске теста интеграции, т. Е. При создании Maven. Это должно произойти программно, чтобы оставить код приложения Mule нетронутым.
Я пытался добавить следующий код в @BeforeClass
аннотированный метод
http://www.rgagnon.com/javadetails/java-fix-certificate-problem-in-HTTPS.html
, но не везло. Я все еще получаю следующее исключение при выполнении интеграционных тестов
Exception stack is:
1. unable to find valid certification path to requested target (sun.security.provider.certpath.SunCertPathBuilderException)
sun.security.provider.certpath.SunCertPathBuilder:196 (null)
2. PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target (sun.security.validator.ValidatorException)
sun.security.validator.PKIXValidator:385 (null)
3. sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target (javax.net.ssl.SSLHandshakeException)
sun.security.ssl.Alerts:192 (http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/net/ssl/SSLHandshakeException.html)
Любой, у кого есть рабочее решение? :)
Нет, простите, это не тот случай. Для моего тестирования интеграции я запускаю полностью встроенную среду, которая во время сборки Maven создается программно. В этом весь смысл использования набора совместимости тестов Mule (TCK) ', и именно здесь возникает проблема с HTTPS. – Guido
Как правило, в этих сценариях, где у вас есть встроенная среда, в которой тестовая среда (в данном случае Mule) отображает/удаляет веб-контейнер, вы можете обычно включать параметры безопасности, в которых Mule должен иметь возможность вводить в контейнер при запуске , Таким образом, последовательность событий должна выглядеть следующим образом: 1. Скопируйте JKS в папку 2. Конфигурация безопасности Развертывание в веб-контейнер 3. Развертывание приложений 4. Выполнить тест 5. Shutdown – anonymous
Хорошо, я думаю, я понимаю вопрос Теперь. У вас есть Mock Service, в которой у вас нет надлежащей цепочки CA, поэтому вы получаете ошибку SSL.Клиентский тест - тот, который испытывает проблему. Когда вы запускаете клиентский тест, вы хотите, чтобы клиент игнорировал ошибки SSL только на время тестирования. В этом случае я бы сказал, что вы используете параметры java для выполнения самого теста: java -Djavax.net.ssl.keyStore = serverKeys -Djavax.net.ssl.keyStorePassword = password -Djavax.net. ssl.trustStore = serverTrust -Djavax.net.ssl.trustStorePassword = password SSLApplication – anonymous