Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Oracle

Как подключиться по HTTPS к сайту с помощью UTL_HTTP : Oracle

28.03.2024 18:39


06.05.2021 19:09
OlegON
 
Для начала сразу хочу определить, что база должна заниматься своими делами, а не лазить по HTTPS куда-либо. Просто воспримите, как данность, что если архитектурно это закладываете в сервис, то лучше каким-то промежуточным приложением, которое будет лезть в сеть, доставать нужные данные, а потом класть их в базу. Просто поверьте, что так правильнее и в дальнейшем это избавит вас от кучи проблем, в том числе связанных со стабильностью базы.
У меня немного другой вариант. Костыль уже написан, только по HTTP, а сервис, куда он лазил, переехал на HTTPS. Соответственно, простая замена протокола на HTTPS выдавала
ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1130
ORA-29024: Certificate validation failure
Выяснилось, что Oracle глубоко наплевать на системные сертификаты, потому необходимо использовать его wallet, чтобы сертификаты туда добавить. К счастью, сделать это достаточно несложно. Для выдирания сертификатов я использую браузер. Хром или фокс, не важно, кликаете на замочке переходите в сертификат, выделяете корень и экспортируете во что-нибудь.



Полученный файлик перебрасываете на сервер с базой и запускаете из командной строки owm, чудовище с диалогами, которые я не видел с прошлого века.



В нем сначала открываете свой wallet (ну или создаете новый), потом импортируете тот файлик, что получился из браузера в wallet.

Собственно, процесс импорта сертификата можно и упростить до одной строки
Код:
orapki wallet add -pwd пароль -wallet путь_к_кошельку -trusted_cert -cert путь_к_сертификату
Для тестирования соединения можно использовать такую процедурку.
SQL код:
declare
l_http_req utl_http.req;
l_http_resp utl_http.resp;
begin
    utl_http
.set_wallet('file:/путь к/wallet''пароль вымарал');
    
l_http_req := utl_http.begin_request('https://olegon.ru');
    
l_http_resp := utl_http.get_response(l_http_req);
    
utl_http.end_response(l_http_resp);
end;

обратите внимание, что указывается путь к директории wallet, а не к файлу кошелька

Если нужно стащить сертификат с сайта из консоли, то можно сделать
Код:
openssl s_client -showcerts -servername olegon.ru -connect olegon.ru:443 </dev/null
в том тексте, который вылезет, можно взять текст от ---- BEGIN CERTIFICATE ---- и до ----- END CERTIFICATE -------
Часовой пояс GMT +3, время: 18:39.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.