Благодаря @ycr (:-)) я сделал несколько шагов вперед, но все еще получал ошибки SSL при попытке достичь конечной точки, требующей SSL на стороне клиента (т.е. сертификат p12 или эквивалент .crt/.key). Я последовал этому, как предложил ycr. Теперь, когда я вызываю конечную точку из Postman через wso mi (встроенный экземпляр в Integration Studio), он выдает: «Ошибка проверки имени хоста для хоста», ссылка на исключение: org.apache.synapse.transport.http.conn.ClientSSLSetupHandler .verify(ClientSSLSetupHandler.java:182).
Теперь, как я уже говорил в предыдущем посте, я могу успешно подключиться к конечной точке (https://37.186.199.242:6443/web-app) скриптом Python:
cert = path\cert.crt
key = path\cert.key
headers = {'Content-type': 'application/json', 'Accept': 'application/json, text/plain, */*'}
data = json.dumps(None)
response = requests.post("https://37.186.199.242:6443/web-app", data=data, headers=headers, cert=(cert,key), verify=False)
который дает мне тот же ответ, что и запрос URL-адреса с помощью chrome с установленным сертификатом cert.p12.
но когда я пытаюсь выполнить request.post с verify=True, я получаю следующее исключение python:
requests.exceptions.SSLError: HTTPSConnectionPool(host='37.186.199.242', port=6443): Max retries exceeded with url: /web-app (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1129)')))
что звучит почти так же, как исключение SSLException, выдаваемое ClientSSLSetupHandler. Таким образом, я думаю, должен ли я воспроизвести такое же поведение в wso mi, отключив проверку хоста? Глядя на исходный код класса java ClientSSLSetupHandler.java, это достигается установкой HostnameVerifier = AllowAll.
что касается встроенного кода: /** * The ALLOW_ALL HostnameVerifier essentially turns hostname verification * off. This implementation is a no-op, and never throws the SSLException. */
многообещающе! Но как это установить?
Я прошел через несколько постов. Лучшая догадка, которую я смог найти, это здесь, предлагающая включить в axis2.xml следующее.
<transportSender name = "https" class = "org.apache.synapse.transport.passthru.PassThroughHttpSSLSender">
<!--...-->
<!--supports Strict|AllowAll|DefaultAndLocalhost or the default if none specified -->
<parameter name = "HostnameVerifier">AllowAll</parameter>
<!--supports Strict|AllowAll|DefaultAndLocalhost or the default if none specified -->
</transportSender>
p.s. поскольку я очень увлекаюсь wso, но это довольно сложный мир, есть ли документ, который я могу изучить, объясняющий (для таких чайников, как я:-), как каждая часть связана? Я имею в виду: carbon, synapse, axis2, диспетчер приложений wso, микроинтегратор wso и его панель управления, esb...


Отключение проверки имени хоста не рекомендуется. В идеале вы должны создавать правильные сертификаты с правильным доменным именем и использовать доменное имя для доступа к службе, а не IP-адрес. Если вы хотите отключить проверку имени хоста, попробуйте добавить следующее в deployment.toml
[transport.http]
sender.hostname_verifier = "AllowAll"
Обновлять
Поскольку у вас есть общедоступный IP-адрес, я только что проверил ваш сертификат, и он не выглядит правильным.
Ваш CN должен быть чем-то вроде *.dflight.com, тогда вы должны использовать это имя хоста для доступа к сервису (например: https://staging.dflight.com). Если вы не приобрели этот домен, вы можете добавить его в файл hosts и получить к нему доступ.
Взгляните на следующий сертификат, используемый WSO2.
Этот ответ также поможет вам, я верю.
спасибо ycr еще раз. У нас есть wildcard сертификат для нашего производственного веб-сайта. Клиентские SSL-сертификаты используются для ограничения доступа к некоторым частям сайта, таким как промежуточная и предварительная подготовка, администрация бэк-офиса или другие зарезервированные области, которые не предназначены для общего доступа, хотя и доступны в общедоступном Интернете. Генерацией таких сертификатов занимается наш поставщик, и по неизвестным мне причинам он использует собственные сертификаты ЦС. Чтобы дать вам представление, найдите здесь снимок клиентского сертификата .p12, который был предоставлен мне. Единственное, что я могу сделать на данный момент, это попытаться отключить проверку имени хоста :-(, надеюсь, это работает так же, как и в реализации pyhton.
кстати настройка: [transport.http]sender.hostname_verifier = "AllowAll" в deployment.toml работает 100% . Только что проверил :-)