12

これからハゲになるので、誰かが私が間違っていることを見つけてくれることを願っています。

私は utl_http と wallets を使用して 11gR1 で https を呼び出すことに問題はありませんでしたが、新しい 12c のインストールは私に多くの悲しみを引き起こしています。

Oracle Wallet Manager とコマンドラインの両方を使用して、信頼できる証明書をインポートしようとしましたが、成功しませんでした。私はオラクルがウォレットのキャッシングに関してうるさいことを知っているので、運がなくても複数の新しいセッションを試しました。

*.presstogo.com、Geotrust SSL CA および Geotrust Global CA に必要な 3 つの証明書をダウンロードしました。

ウォレットを作成するコマンドライン バージョンは次のとおりです。

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  

わかりました、これをテストしましょう。sqlplus にログインし、次を実行します。

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;  

宣言する

*

1 行目のエラー:

ORA-29273: HTTPリクエストが失敗しました

ORA-06512: "SYS.UTL_HTTP"、1130行目

ORA-29024: 証明書の検証に失敗しました

ORA-06512: 6行目

記録のために、以下が機能することに注意してください。

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;  
/  

助けてオビワン、あなただけが頼りです。

4

1 に答える 1

26

他人の利益のために自分の質問に答える。

Oracle サポートによると、エンド サイトの証明書ではなく、証明書チェーンのみをインポートする必要があります。上記で使用した例では、次の証明書のみをウォレットにインポートします。

Geotrust SSL CA&Geotrust Global CA

*.presstogo.com 証明書をインポートしないでください

Oracle サポートを引用するには:

12cで選択が失敗する理由は、12cがウォレット内のユーザー証明書を信頼できる証明書として表示したくないためです。

これは明らかに以前のバージョンでは問題ではありませんでしたが、ウォレットからその証明書を削除すると、ここで問題が修正されました。

これは、utl_http を使用して Https サイトに接続することに関して、私がオンラインで見つけたすべての情報と矛盾しており、私を混乱させました。

うまくいけば、これは私の状況で他の人を助けるでしょう.

于 2013-10-22T20:44:54.270 に答える