title: Using utl_http & wallets on 12c: certificate validation failure
body: <p>Hope someone can spot what I'm doing wrong as I'm going bald from this.</p>
  
  <p>I have used utl_http &amp; wallets to call https on 11gR1 without much trouble, but our new 12c installation is causing me a lot of grief.</p>
  
  <p>I have tried importing the trusted certificate using both oracle wallet manager, and command line, without any success.
  I know that oracle can be picky as to caching the wallet, so I have tried multiple new sessions without any luck.</p>
  
  <p>I have downloaded the three neccessary certificates for *.presstogo.com, Geotrust SSL CA &amp; Geotrust Global CA.</p>
  
  <p>The command-line version of my building the wallet is  as follows:</p>
  
  <pre><code>orapki wallet create -wallet /oracle/product/12.0.1/owm/wallets/test1237 -pwd test=1237 -auto_login  
  orapki wallet add -wallet /oracle/product/12.0.1/owm/wallets/test1237 -trusted_cert -cert "*.presstogo.com" -pwd test=1237  
  orapki wallet add -wallet /oracle/product/12.0.1/owm/wallets/test1237 -trusted_cert -cert "GeoTrust SSL CA" -pwd test=1237  
  orapki wallet add -wallet /oracle/product/12.0.1/owm/wallets/test1237 -trusted_cert -cert "Geotrust Global CA" -pwd test=1237  
  orapki wallet display -wallet /oracle/product/12.0.1/owm/wallets/test1237   
  Oracle PKI Tool : Version 12.1.0.1  
  Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.  
  Requested Certificates:   
  User Certificates:  
  Trusted Certificates:   
  Subject:        OU=Class 3 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US  
  Subject:        CN=GTE CyberTrust Global Root,OU=GTE CyberTrust Solutions\, Inc.,O=GTE Corporation,C=US  
  Subject:        CN=GeoTrust SSL CA,O=GeoTrust\, Inc.,C=US  
  Subject:        OU=Class 2 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US  
  Subject:        OU=Class 1 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US  
  Subject:        CN=GeoTrust Global CA,O=GeoTrust Inc.,C=US  
  Subject:        CN=*.presstogo.com,OU=IT,O=Press to go AS,L=Oslo,ST=Norway,C=NO,SERIAL_NUM=SJYpOHrRdCDHE8KZ6dRFGMJthOjs7-v3  
  </code></pre>
  
  <p>Ok, lets test this. Login to sqlplus and run the following:</p>
  
  <pre><code>declare  
      lo_req    utl_http.req;  
      lo_resp   utl_http.resp;  
  begin  
      utl_http.set_detailed_excp_support ( true );  
      utl_http.set_wallet ( 'file:/oracle/product/12.0.1/owm/wallets/test1237', 'test=1237');  
      lo_req := utl_http.begin_request ( 'https://production.presstogo.com/mars/hello' );  
      lo_resp := utl_http.get_response ( lo_req );  
      -- A successfull request would have the status code "200".   
      dbms_output.put_line ( lo_resp.status_code );  
      utl_http.end_response ( lo_resp );  
  exception  
    when others then    
      utl_http.end_response ( lo_resp );  
      raise;  
  end;  
  </code></pre>
  
  <p>DECLARE</p>
  
  <p>*</p>
  
  <p>ERROR at line 1:</p>
  
  <p>ORA-29273: HTTP request failed</p>
  
  <p>ORA-06512: at "SYS.UTL_HTTP", line 1130</p>
  
  <p>ORA-29024: Certificate validation failure</p>
  
  <p>ORA-06512: at line 6</p>
  
  <p>For the record, It is worth noting that the following does work:</p>
  
  <pre><code>declare  
      lo_req    utl_http.req;  
      lo_resp   utl_http.resp;  
  begin  
      utl_http.set_wallet ( 'file:/oracle/product/12.0.1/owm/wallets/test1237', 'test=1237');  
      lo_req := utl_http.begin_request ( 'https://www.google.be' );  
      lo_resp := utl_http.get_response ( lo_req );  
      dbms_output.put_line ( lo_resp.status_code );  
      utl_http.end_response ( lo_resp );  
  end;  
  /  
  </code></pre>
  
  <p><em>Help me Obi-Wan, you're my only hope.</em></p>