powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / oracle wallet import cert USDA
6 сообщений из 6, страница 1 из 1
oracle wallet import cert USDA
    #39811751
s u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги,

Столкнулся с такой проблемой --- не удается вызвать API у серваиса api.nal.usda.gov

возникает следующая ошибка

ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1130
ORA-29024: Certificate validation failure


с wallet и API работаю не первый раз, но тут застрял в тупике.

дано - 11.2.0.4 + latest patches

Шаги

1. ACL


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
declare
   v_acl_tx varchar2(200) := 'api.nal.usda.gov.xml';
   v_index varchar2(255);
   v_schema_tx varchar2 (30) := upper('&MY_USER_HERE');
begin 
    
        DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl         =>v_acl_tx,
                                            description => 'USDA',
                                            principal   => v_schema_tx,
                                            is_grant    => true,
                                            privilege   => 'connect');

        DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl  => v_acl_tx,
                                    host => 'api.nal.usda.gov');

     
        DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl       => v_acl_tx,
                                                 principal => v_schema_tx,
                                                 is_grant  => true,
                                                 privilege => 'resolve');
                                                 

   commit;
end;





2. CREATE OR REPLACE procedure


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
CREATE OR REPLACE procedure p_usda_list is
   v_endpoint_tx varchar2(2000) := 'https://api.nal.usda.gov/ndb/list?format=json&lt=f&sort=n&api_key=DEMO_KEY';
   req   utl_http.req;
   resp  utl_http.resp;
   value_tx varchar2(1024);
begin
  utl_http.set_wallet('file:/home/oracle/app/wallet', 'MyPassword123');
       
   utl_http.set_transfer_timeout(300);
   utl_http.set_body_charset('UTF-8');
   req := utl_http.begin_request(url => v_endpoint_tx, method => 'GET');
          
   resp := utl_http.get_response(req);

   begin
      loop
         utl_http.read_text(resp, value_tx, 32766);
         dbms_output.put_line (value_tx);
      end loop;
   exception
       when utl_http.end_of_body then null;
   end;
   utl_http.end_response(resp);
          
exception
  when others then
     if resp.private_hndl is not null then
        utl_http.end_response (resp);
     end if;

     if req.private_hndl is not null then
        utl_http.end_request (req);
     end if;
     dbms_output.put_line (sqlerrm || chr(10) ||
                              dbms_utility.FORMAT_CALL_STACK || chr(10) || 
                              dbms_utility.FORMAT_ERROR_BACKTRACE || chr(10) || 
                              dbms_utility.FORMAT_ERROR_STACK
                             );
end;




3. export certificates and create oracle wallet

https://oracle-base.com/articles/misc/utl_http-and-ssl

4. ну и собственно сам вызов процедуры

Код: plsql
1.
2.
3.
4.
begin
p_usda_list;
end;
/



пробовал создавать wallet и со всеми тремя сертификатами, и только с корневым, и только с корневым и промежуточным.
также пробовал использовать wallet manager как 11 так и 12 версии.
firewall открыт
Код: powershell
1.
curl 'https://api.nal.usda.gov/ndb/list?format=json&lt=f&sort=n&api_key=DEMO_KEY'

- отрабатывает отлично

Может быть кто-то подскажет в чем причина или попробует у себя воспроизвести?

Заранее спасибо
...
Рейтинг: 0 / 0
oracle wallet import cert USDA
    #39811789
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s uдано - 11.2.0.4 + latest patchesбесперспективняк...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
OpenSSL> s_client -connect api.nal.usda.gov:443
CONNECTED(00000006)
depth=0 CN = sni-support-required-for-valid-ssl
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = sni-support-required-for-valid-ssl
verify return:1
---
Certificate chain
 0 s:/CN=sni-support-required-for-valid-ssl
   i:/CN=sni-support-required-for-valid-ssl
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDMDCCAhigAwIBAgIJAJn4Bzh6I1xdMA0GCSqGSIb3DQEBCwUAMC0xKzApBgNV
BAMMInNuaS1zdXBwb3J0LXJlcXVpcmVkLWZvci12YWxpZC1zc2wwHhcNMTkwNTA4
MTQ0MTUyWhcNMjkwNTA1MTQ0MTUyWjAtMSswKQYDVQQDDCJzbmktc3VwcG9ydC1y
ZXF1aXJlZC1mb3ItdmFsaWQtc3NsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAz0AwaIu+oFHjgsCESXlJjx8X2wgyDs505UDIwqv4gXXJQinY/NpOIBHM
z0x052Qd+tncnZqt4q2y5/VTj6o9T2tEg7Mpd7q5KgLt57dcIk2swkeJOg1XExIQ
zjv5yAasj+4c1y7gGcYZQXL6uQMd60Gelqd4tFQRYmIfHObBER+MzW+PIw1ekQ+p
KJ6WAACJ5a9e7iH9AR+vGVgIEeSMKsoS/6FpADI7ybPUXR9KscGbbafCS/kBR5RA
3vtjsfHDg0LMHvU9rbCxKud21Ry6s8B4ZJ525WE36y5rD1r/JC4/ThDC/N82sH69
jCLQjewbHjgJO9aQGxYqGg/Wh55ktwIDAQABo1MwUTAdBgNVHQ4EFgQUou6WI3HS
AGUG74+qz73+DbePZmIwHwYDVR0jBBgwFoAUou6WI3HSAGUG74+qz73+DbePZmIw
DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAxWQV3+5cUiD9mjmO
tpZAc42Dv6OXRqsDaJcZfcqgBAUUjeECaAgI+qIMYp4skQkH5TO9EXMSwv33cLcx
r7rxtqobtsOYnmQg/0+X5JiPpf0suQTNRe8rj7UFmKuIAflA5rfXvJ1dXYN8gDYg
QSxtBAc4hb3ToCvmsZztFmDKLkJ4izKmdA/rTdOI/ciJJtK3e47m1OiOyMAMSJ7Z
jQHaXrTxKjGnv1+vNhM/OEDCVzJ4TUo7/DzqWUjLWvmrD49ctuFmPzy5BeXR9/3i
dLihn10DSmkdzfGt1stULqsCC747waUJMSkOcdqiyhFDCDKzh7RCV3CL4IKxKwiP
KUYr3w==
-----END CERTIFICATE-----
subject=/CN=sni-support-required-for-valid-ssl
issuer=/CN=sni-support-required-for-valid-ssl
---
No client certificate CA names sent
---
SSL handshake has read 1490 bytes and written 444 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256
    Session-ID: 9CA741580AB85403806DFDC9C021B40B89F73185478F3CCBA7500AB88DE30B41
    Session-ID-ctx: 
    Master-Key: 93ED6B9943CCA2613B3939B562291A27704A60609C8EDB915D27CEB1AEED97F35562D793B473871C3B0178FE9E51B1BC
    TLS session ticket lifetime hint: 600 (seconds)
    TLS session ticket:
    0000 - c2 9f aa 80 8c 08 3d 10-4c 7d 1a 62 9d 04 95 46   ......=.L}.b...F
    0010 - f2 40 a0 31 a4 79 7c cb-5e 13 e7 f4 61 27 36 e9   .@.1.y|.^...a'6.
    0020 - 9e 93 b4 c0 ac 65 ca dc-d8 34 78 15 38 7f e6 16   .....e...4x.8...
    0030 - 08 6e 56 48 4c 99 be 51-3e f2 ef 04 24 c1 4f a5   .nVHL..Q>...$.O.
    0040 - 27 3b 7c 3a 5c 04 45 5e-7e b4 23 94 96 44 90 cf   ';|:\.E^~.#..D..
    0050 - 15 f7 8e 61 08 10 c8 62-09 12 ca 08 51 b1 8d 45   ...a...b....Q..E
    0060 - ef 70 c4 ba be 3f a2 42-7b 2d c5 b4 47 01 80 aa   .p...?.B{-..G...
    0070 - d8 42 60 95 5d 8d 94 a1-25 51 32 19 a1 20 d1 4f   .B`.]...%Q2.. .O
    0080 - 01 55 2c 09 20 f0 4a 36-a2 af 41 9e b8 cd ce 3a   .U,. .J6..A....:
    0090 - a7 97 b5 0c 67 6f b3 05-16 9b 8e 29 4d 87 58 d2   ....go.....)M.X.
    00a0 - 7b c7 bc bc b6 db 7b ca-39 f8 3f eb f7 06 b7 8c   {.....{.9.?.....

    Start Time: 1557450904
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---
closed
OpenSSL> 


MOSSNI support is included in 12.2.0.1 version database and thus will need to apply the Patch 25734963 for 12.2.0.1 versionНастраивайте stunnel и ходите через него.
...
Рейтинг: 0 / 0
oracle wallet import cert USDA
    #39811958
Андрей Панфилов, скажу вам спасибо помимо автора темы...
...
Рейтинг: 0 / 0
oracle wallet import cert USDA
    #39811967
s u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,

Спасибо. я тоже обнаружил что 11g не поддерживает.

в stunnel не силен... пытаюсь настроить, но видать он тоже как-то хитро с SNI работает

/etc/stunnel/stunnel.conf
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
# GLOBAL OPTIONS
output = /var/log/stunnel-log.txt
cert = /etc/ssl/certs/stunnel.pem
debug=7


[Tunnel_in]
client = yes
accept = localhost:9443
connect = localhost:54321

[Tunnel_out]
client = no
accept = localhost:54321
connect = api.nal.usda.gov:443



в итоге curl отрабатывает
Код: powershell
1.
curl 'https://localhost:9443/ndb/list?format=json&lt=f&sort=n&api_key=DEMO_KEY'



но сервер возвращает ошибку

Код: html
1.
2.
3.
4.
5.
6.
{
  "error": {
    "code": "NOT_FOUND",
    "message": "The requested URL was not found on this server."
  }
}



уже хорошо... уже можем достучаться до сервера.. но видать не тот сервис отвечает...

запускал curl -v... разные сертификаты возвращаются

curl -k 'https://localhost:9443/ndb/reports/?ndbno=01009&type=f&format=json&api_key=DEMO_KEY' -v
* About to connect() to localhost port 9443 (#0)
* Trying ::1... connected
* Connected to localhost (::1) port 9443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* warning: ignoring value of ssl.verifyhost
* skipping SSL peer certificate verification
* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate:
* subject: CN=sni-support-required-for-valid-ssl
* start date: May 10 03:58:54 2019 GMT
* expire date: May 07 03:58:54 2029 GMT
* common name: sni-support-required-for-valid-ssl
* issuer: CN=sni-support-required-for-valid-ssl

> GET /ndb/reports/?ndbno=01009&type=f&format=json&api_key=DEMO_KEY HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: localhost:9443
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Server: openresty
< Date: Fri, 10 May 2019 20:42:32 GMT
< Content-Type: application/json
< Transfer-Encoding: chunked
< Connection: keep-alive
< Vary: Accept-Encoding
< Access-Control-Allow-Origin: *
< X-Cache: MISS
< Strict-Transport-Security: max-age=31536000; preload
<
{
"error": {
"code": "NOT_FOUND",
"message": "The requested URL was not found on this server."
}
* Connection #0 to host localhost left intact
* Closing connection #0
}


curl 'https://api.nal.usda.gov/ndb/reports/?ndbno=01009&type=f&format=json&api_key=DEMO_KEY' -v > /var/log/curl.log
* About to connect() to api.nal.usda.gov port 443 (#0)
* Trying 52.0.84.171... connected
* Connected to api.nal.usda.gov (52.0.84.171) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate:
* subject: CN=api.nal.usda.gov
* start date: Apr 15 14:40:22 2019 GMT
* expire date: Jul 14 14:40:22 2019 GMT
* common name: api.nal.usda.gov
* issuer: CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US

> GET /ndb/reports/?ndbno=01009&type=f&format=json&api_key=DEMO_KEY HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: api.nal.usda.gov
> Accept: */*
>
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0< HTTP/1.1 200
< Server: openresty
< Date: Fri, 10 May 2019 20:40:02 GMT
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< Vary: Accept-Encoding
< X-RateLimit-Limit: 3600
< X-RateLimit-Remaining: 3597
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Credentials: true
< Access-Control-Allow-Methods: GET, POST, OPTIONS
< Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type
< Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
< Age: 0
< Via: https/1.1 api-umbrella (ApacheTrafficServer [cMsSf ])
< X-Cache: MISS
< Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
<
{ [data not shown]
100 267k 0 267k 0 0 172k 0 --:--:-- 0:00:01 --:--:-- 187k* Connection #0 to host api.nal.usda.gov left intact

* Closing connection #0




ssllabs на sni-support-required-for-valid-ssl сертификат выдает следующее

ssllabs
Certificate #2: RSA 2048 bits (SHA256withRSA) No SNI Hide Server Certificate

Server Key and Certificate #1
Subject sni-support-required-for-valid-ssl
Fingerprint SHA256: 17fa3cb3c3c9b09ddca52ceedd556496d0b675e950a7535fae0f4088026bd611
Pin SHA256: h1hvHiwxEdRmYpkyk938vCwVL5T5Bq1jbzv8OV3fL9o=
Common names sni-support-required-for-valid-ssl
Alternative names - INVALID
Serial Number 00a7a679940046d9a0
Valid from Fri, 10 May 2019 03:58:54 UTC
Valid until Mon, 07 May 2029 03:58:54 UTC (expires in 9 years and 11 months)
Key RSA 2048 bits (e 65537)
Weak key (Debian) No
Issuer sni-support-required-for-valid-ssl Self-signed
Signature algorithm SHA256withRSA
Extended Validation No
Certificate Transparency No
OCSP Must Staple No
Revocation information None
Trusted No NOT TRUSTED
Mozilla Apple Android Java Windows


пробовал добавить SNI опцию, но stunnel ругнулся - Specified option name is not valid here

Подскажите куда копать?

Спасибо
...
Рейтинг: 0 / 0
oracle wallet import cert USDA
    #39811971
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s u
в итоге curl отрабатывает
Код: powershell
1.
curl 'https://localhost:9443/ndb/list?format=json&lt=f&sort=n&api_key=DEMO_KEY'



но сервер возвращает ошибку

Код: html
1.
2.
3.
4.
5.
6.
{
  "error": {
    "code": "NOT_FOUND",
    "message": "The requested URL was not found on this server."
  }
}



...

Подскажите куда копать?


Ошибка ожидаема, потому что помимо разруливания нужного endpoint через SNI, оно еще через заголовки http разруливается, т.е. когда вы делаете
Код: powershell
1.
curl 'https://localhost:9443/ndb/list?format=json&lt=f&sort=n&api_key=DEMO_KEY'

, оно на сервер шлет 'Host: localhost', а тот такого финта "не ожидает". Есть два варианта:

1. Прописывем в stunnel ip-адрес настоящего endpoint, а в /etc/hosts маппинг api.nal.usda.gov на 127.0.0.1 и в pl/sql ходим на http://api.nal.usda.gov:54321

Код: sql
1.
2.
3.
4.
5.
[Tunnel_out]
client = yes
accept = localhost:54321
connect = 52.86.117.226:443
sni = api.nal.usda.gov



вариант так себе из-за того что ip нужно указывать, но вполне рабочий

2. используем stunnel в качестве proxy

Код: sql
1.
2.
3.
4.
5.
[Tunnel_out]
client = yes
accept = localhost:54321
connect = api.nal.usda.gov:443
sni = api.nal.usda.gov



заметьте, что ходим на http, а не https:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
curl 'http://api.nal.usda.gov/ndb/list?format=json&lt=f&sort=n&api_key=DEMO_KEY' --proxy http://localhost:54321
{
    "list": {
        "lt": "f",
        "start": 0,
        "end": 50,
        "total": 50,
        "sr": "1",
        "sort": "n",
        "item": [
...
Рейтинг: 0 / 0
oracle wallet import cert USDA
    #39811983
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s uпробовал добавить SNI опцию, но stunnel ругнулся - Specified option name is not valid here
Подскажите куда копать?Версия stunnel старая? - Потому что старая версия openssl?

nginx как TLS termination proxy умеет подставлять правильный HOST.

Андрей Панфилов1. Прописывем в stunnel ip-адрес настоящего endpoint, а в /etc/hosts маппинг api.nal.usda.gov на 127.0.0.1 и в pl/sql ходим на http://api.nal.usda.gov:54321
Код: sql
1.
2.
accept = localhost:54321
connect = 52.86.117.226:443

Порт тоже является частью заголовка HOST.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / oracle wallet import cert USDA
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]