Доброго дня всем,
на днях столкнулся с проблемой, с Oracle Database 11g (11.2.0.4), необходимо было делать запросы на внешний URL с https.
Как обычно настраивается такое взаимодействие:
1) Необходимо прописать acl
2) Настроить Oracle wallet
1) Настраиваем acl
BEGIN
DBMS_NETWORK_ACL_ADMIN.create_acl (
acl => 'https.xml',
description => 'ACL to grant access to https',
principal => 'APEX_050100',
is_grant => TRUE,
privilege => 'connect',
start_date => SYSTIMESTAMP,
end_date => NULL);
COMMIT;
END;
/
BEGIN
DBMS_NETWORK_ACL_ADMIN.assign_acl (
acl => 'https.xml',
host => 'site_with_https.com',
lower_port => 443,
upper_port => NULL);
COMMIT;
END;
/
2) Настраиваем wallet
Тут лучше всего подойдет статья https://oracle-base.com/articles/misc/utl_http-and-ssl
Теперь к сути проблемы, настроил продуктивный сервер, там все нормально, соединение устанавливается успешно. А на препроде ошибка ORA-29273 и ORA-29259:
2 дня активного гугления не привели к никакому результату, пока я не решил сравнить какие патчи установлены на обе базы данных. Я предполагал что сервера идентичны. Но я очень удивился, когда обнаружил что на сервере с ошибкой установлен патч 20551790, которого нет на продуктивной системе. Данный патч закрывает баг UTL_HTTP: "ORA-29259: end-of-input reached" after updating TLS protocol support with MES bundle (Doc ID 2213850.1).
Выяснилось следующее, если у вас установлен патч 22695784, который добавляет поддержку протоколов TLSv1.1 и TLSv1.2, а также установлен патч 20551790, который ограничивает использование протокола TLSv1.0, вместо протокола TLSv1.2 используется TLSv1.0, который отклоняется URL с https. Решение одно, необходимо удалить патч 20551790.После того, как я удалил этот патч, соединение прошло успешно.
Комментариев нет:
Отправить комментарий