2015-03-03 19 views
5

Napisałem następujący kod w PL/SQL dla wywoływania API innych firm z Oracle 11g.Certyfikat wysłany przez drugą stronę nie mógł zostać zatwierdzony - Oracle Wallet

Begin 

    -- preparing Request... 
    l_http_request := UTL_HTTP.begin_request ('https://www..........' 
              , 'GET' 
              , 'HTTP/1.1'); 
    -- set header's attributes...           
    UTL_HTTP.set_header(l_http_request, 'Content-Type', 'application/json'); 
    UTL_HTTP.set_header(l_http_request, 'Content-Length', LENGTH(t_request_body)); 
    UTL_HTTP.set_header(l_http_request, 'Api-Key','..............'); 

    -- get Response and obtain received value 
    l_http_response := UTL_HTTP.get_response(l_http_request); 

    UTL_HTTP.read_text(l_http_response, l_response_text); 

end; 

Kiedy uruchomić ten kod Dostaję następujący błąd

Error report: 
ORA-29273: HTTP request failed 
ORA-06512: at "SYS.UTL_HTTP", line 1130 
ORA-29024: Certificate validation failure 
ORA-06512: at line 13 
29273. 00000 - "HTTP request failed" 
*Cause: The UTL_HTTP package failed to execute the HTTP request. 
*Action: Use get_detailed_sqlerrm to check the detailed error message. 
      Fix the error and retry the HTTP request. 

zorientowali się, że jest to spowodowane „https” protocole. Pobrałem więc wszystkie odpowiednie certyfikaty, a następnie przekazałem je naszemu zespołowi DB. Chociaż skonfigurowali portfel Oracle z tymi certyfikatami, wciąż otrzymujemy ten sam raport o błędzie.

Jakieś myśli?

UPDATE: Dodałem następujący kod jako pierwszych wierszy rozpocząć bloku ...

UTL_HTTP.SET_DETAILED_EXCP_SUPPORT(TRUE); 
    UTL_HTTP.SET_WALLET('file:/../wallet','pwd.....'); 

ale teraz daje następujący wyjątek „certyfikat jest nieważny”, chociaż nadawca certyfikat potwierdza ważność. Również ważność można potwierdzić, patrząc na ten zewnętrzny moduł sprawdzania pisowni: https://www.sslshopper.com.

Error report: 
ORA-29024: Certificate validation failure 
ORA-06512: at "SYS.UTL_HTTP", line 1128 
ORA-06512: at line 16 
29024. 00000 - "Certificate validation failure" 
*Cause: The certificate sent by the other side could not be validated. This may occur if 
      the certificate has expired, has been revoked, or is invalid for another reason. 
*Action: Check the certificate to determine whether it is valid. Obtain a new certificate, 
      alert the sender that there certificate has failed, or resend. 

Należy pamiętać, że mam dość wszystkie formaty plików certyfikat (Base-64 kodowany/PKCS # 7 itd.) Jak wyjaśniono w http://oracle-base.com/articles/misc/utl_http-and-ssl.php

Wszelkie myśli?

+0

zobacz ten wpis: http://stackoverflow.com/a/16081869/92837 – Sathya

+1

@Sathya, w tym poście ustawili portfel na wywołanie kodu pll sql jak EXEC UTL_HTTP.set_wallet ('file:/u01/app/oracle/admin/DB11G/wallet ',' WalletPasswd123 '); Czy to musi być? – CAD

+0

Jaka * dokładna * wersja bazy danych? Czy jest w pełni załatany? Który protokół/wersja używasz: SSLv3? TSLv1? Coś innego? – APC

Odpowiedz

1

Osobiście uważam za trudne ładowanie certyfikatów każdej witryny, do której chce się uzyskać dostęp w Portfelu Oracle (prawdopodobnie dlatego pojawia się błąd - należy zainstalować certyfikaty i łańcuchy strona internetowa, z której próbujesz uzyskać dostęp do Portfela).

Najprostszym rozwiązaniem jest zainstalowanie stunnel https://www.stunnel.org/index.html

Konfiguruj stunnel do nasłuchiwania połączeń przychodzących na port lokalny, takich jak 8800, a następnie dokonać połączenia wychodzącego somesite.com:443.

coś takiego:

1. oracle issues a get as: http://localhost:8080/index.html 
2. stunnel intercepts the request and gets https://somesite.com/index.html 
3. stunnel gives results to oracle 

Pozwala Oracle komunikować się za pośrednictwem protokołu HTTP stunnel, następnie stunnel komunikuje https://somesite.com i dostarcza dane do wyroczni na porcie 80.

Ten całkowicie omija Oracle Portfel.

Ponieważ nie jest to bezpośrednia odpowiedź na Twoje pytanie, to z pewnością rozwiązuje wiele, wiele problemów z Oracle Wallet i moim zdaniem jest najlepszym rozwiązaniem.