wso2am 2.6.0: исключение SSL при вызове API, который использует пользовательский класс mediator

#wso2 #wso2-am

#wso2 #wso2-api-manager

Вопрос:

Установлен wso2am 2.6.0.

  1. Созданный и опубликованный API — Myapi . Myapi отображается в хранилище API и оттуда может быть вызван (получает правильный ответ).
  2. Создал свой собственный пользовательский класс demo mediator (ничего особенного, просто выводит некоторую информацию) и загрузил его в <API-M_HOME>/repository/components/lib .
  3. Создал последовательность xml с моим собственным пользовательским классом и вручную загрузил его для Myapi (в издателе API «Включено посредничество сообщений» для «В потоке»).
  4. Перезапущенный сервер, и похоже, что мой пользовательский класс mediator успешно зарегистрирован.

Но теперь, когда я пытаюсь вызвать этот API через API store, он выдает такое исключение:

 [2019-03-23 21:04:00,858] ERROR - SourceHandler I/O error: Received fatal alert: certificate_unknown
javax.net.ssl.SSLException: Received fatal alert: certificate_unknown
        at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
        at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1666)
        at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1634)
        at sun.security.ssl.SSLEngineImpl.recvAlert(SSLEngineImpl.java:1800)
        at sun.security.ssl.SSLEngineImpl.readRecord(SSLEngineImpl.java:1083)
        at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:907)
        at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781)
        at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
        at org.apache.http.nio.reactor.ssl.SSLIOSession.doUnwrap(SSLIOSession.java:245)
        at org.apache.http.nio.reactor.ssl.SSLIOSession.doHandshake(SSLIOSession.java:280)
        at org.apache.http.nio.reactor.ssl.SSLIOSession.isAppInputReady(SSLIOSession.java:410)
        at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:119)
        at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:159)
        at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:338)
        at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:316)
        at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:277)
        at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:105)
        at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:586)
        at java.lang.Thread.run(Thread.java:748)
[2019-03-23 21:04:00,874]  INFO - LogMediator IN_MESSAGE = json_validator
[2019-03-23 21:04:00,879]  INFO - LogMediator STATUS = Executing default 'fault' sequence, ERROR_CODE = 0, ERROR_MESSAGE = Error occured in the mediation of the class mediator
  

Та же проблема возникает, когда я выбираю другой, т.Е. json_validator посредник (который не является моим пользовательским, поэтому проблема не только в моем пользовательском посреднике), но т.е. с debug_in_flow посредником все работает.
Похоже, что эта проблема возникает, когда mediator использует какой-либо класс mediator, а затем выдает это исключение SSL.

Есть идеи, куда следует добавить сертификат? Насколько я понимаю, внутренняя служба пытается вызвать пользовательский класс Java без сертификата и завершается неудачей.

Комментарии:

1. Вызов класса Java не имеет ничего общего с каким-либо сертификатом. Исключение действительно указывает на то, что что-то пытается вызвать конечную точку https, и ssl-подтверждение завершается неудачей. Неясно, происходит ли это из вашего пользовательского посредничества или из целевой конечной точки службы. Received fatal alert: certificate_unknown это может указывать на то, что конечной точке требуется клиентский сертификат для взаимного ssl. Вы его настроили?

2. @gusto, пользовательский посредник очень прост, он выводит просто строку для регистрации. И целевой конечной точкой является http (без посредника все работает).

3. С учетом предоставленной информации такое поведение очень странно. Я чувствую, что чего-то не хватает в описании. Вы сказали, что ваш API работал до прикрепления последовательности. У меня есть 2 вопроса. (1) Если вы задаете последовательность None , это снова работает? (2) Если вы удалите свой jar из библиотеки и установите json_validator , это сработает?

4. @Bee, спасибо за предложение, ваши мысли натолкнули меня на идею переустановить сервер wso2am с нуля (поскольку ранее были сделаны некоторые настройки), и теперь он постоянно выдает это исключение, но это не влияет на поток посредничества — пользовательский посредник вызывается в любом случае (я немного обновил его, и теперь он регистрирует информацию). Также я думаю, что это исключение связано с тем, что wso2am запускается на моем vagrant Ubuntu box, и я пытаюсь получить доступ к wso2am со своего хост-компьютера, а не с localhost.

5. На что похоже ваше развертывание? Один узел? и есть ли у вас балансировщик нагрузки спереди?

Ответ №1:

Возникает исключение, но оно не влияет на поток пользовательского посредника.