2022年11月22日火曜日

Oracle APEXの環境作成(9) - REST呼び出しに使うウォレットの作成

 APEX_WEB_SERVICE.MAKE_REST_REQUESTを使用してREST APIを呼び出すには、ルート認証局(CA)の証明書を含むウォレットの指定が必要です。通常はOracle APEXのインスタンスにウォレットを設定することにより、APIでの指定を省略できるようにします。

Oracle APEXの管理サービスにサインインし、インスタンスの管理インスタンスの設定を開きます。

インスタンスの設定ウォレットのセクションがあります。

ウォレット・パスにルート認証局の証明書がロードされたウォレットのファイルが含まれるディレクトリ指定します。今回は/home/oracle/wallet以下にウォレットのファイルを配置します。

ウォレット・パスの指定は以下になります。

file:///home/oracle/wallet

ウォレットに含まれる証明書はルート認証局のものだけなので、すべて公開されている情報です。そのため、ウォレットをパスワードで保護する必要はありません。

ウォレットは自動ログイン・ウォレットとして作成するので、この項目にチェックを入れます。

以上でOracle APEX側の設定は完了です。

以下にウォレットの作成方法を説明します。

これより説明している手順で作成したウォレットを以下におきました。公開されている情報を元に作成していますが、ご自身でルート認証局の証明書を集めて作成することを推奨します。
https://github.com/ujnak/apexapps/blob/master/wallet/cwallet.sso
https://github.com/ujnak/apexapps/blob/master/wallet/ewallet.p12

2023年11月15日追記

Oracle APEX 23.2より管理サービスインスタンスの設定に含まれる電子メールOracle APEXインスタンスのURLOracle APEXのイメージURLの設定が必須項目になり、かつ、デフォルトで空白になっています(デフォルトURLをクリックすると、Oracle APEXの実行環境に合わせてURLが挿入されます)。


ウォレットウォレット・パスを設定する際に、これらのURLも設定する必要があります。設定していない場合、以下のようにエラーが発生します。



ウォレットの作成手順


最初にルート認証局の証明書を集めます。

信頼できる証明書は使用しているローカルのPCに大抵は含まれています。そのため、手元のPCから取り出すのが早いでしょう。

macOSの場合はキーチェーンアクセスから、信頼できる認証局の証明書を取得できます。

キーチェーンアクセスを起動し、システムルート証明書を一覧します。証明書をすべて選択し、コンテキスト・メニューを表示させて、nnn項目を書き出す...を実行します。


フォーマット証明書(.cer)またはPEM形式(.pem)を選択します。どちらでも出力されるデータに違いはないようです。今回は証明書(.cer)を選択して保存します。

名前all-certs.cerとしています。


出力されたファイルall-certs.cerには、以下のように複数の証明書が含まれます。

-----BEGIN CERTIFICATE-----

MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG

EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo

bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g

RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ

TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s

b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw

djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0

WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS

fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB

zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq

hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB

CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD

+JbNR6iC8hZVdyR+EhCVBCyj

-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----

MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ

RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD

VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX

DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y

ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy


[略]


このファイルを仮想マシンの/tmp以下に/tmp/all-certs.cerとしてアップロードしておきます。

Oracle DatabaseおよびOracle APEXをインストールしたマシンにサインインし、ユーザーoracleで作業を行います。データベースの環境を読み込みます。

[oracle@apex ~]$ cd $HOME

[oracle@apex ~]$ . oraenv

ORACLE_SID = [oracle] ? FREE

The Oracle base has been set to /opt/oracle

[oracle@apex ~]$ 


ウォレットを/home/oracle/walletに作成します。指定するパスワードは最低でも8文字以上の長さで、英字、数字、特殊文字を含む必要があります。自動ログイン・ウォレット(パスワード不要のウォレット)とするため、-auto_loginを付加します。

orapki wallet create -wallet wallet -pwd <パスワード> -auto_login

[oracle@apex ~]$ orapki wallet create -wallet wallet -pwd ******** -auto_login

Oracle PKI Tool Release 23.2.0.0.0 - Production

Version 23.2.0.0.0

Copyright (c) 2004, 2023, Oracle and/or its affiliates. All rights reserved.


Operation is successfully completed.

[oracle@apex ~]$ 


認証局の証明書をロードします。最初に/tmp/all-certs.cerをそれぞれの認証局の証明書ごとのファイルに分割します。以下のスクリプトを使用します。


ホーム・ディレクトにcert-separate.shとして作成し、引数として/tmp/all-certs.cerを渡して実行します。certで始まる複数のファイルが作成されます。

sh cert-separate.sh /tmp/all-certs.cer
 

[oracle@apex ~]$ sh cert-separate.sh /tmp/all-certs.cer 

[oracle@apex ~]$ ls cert*.cer

cert100.cer  cert125.cer  cert14.cer   cert29.cer  cert53.cer  cert78.cer

cert101.cer  cert126.cer  cert150.cer  cert2.cer   cert54.cer  cert79.cer

cert102.cer  cert127.cer  cert151.cer  cert30.cer  cert55.cer  cert7.cer

cert103.cer  cert128.cer  cert152.cer  cert31.cer  cert56.cer  cert80.cer

cert104.cer  cert129.cer  cert153.cer  cert32.cer  cert57.cer  cert81.cer

cert105.cer  cert12.cer   cert154.cer  cert33.cer  cert58.cer  cert82.cer

cert106.cer  cert130.cer  cert155.cer  cert34.cer  cert59.cer  cert83.cer

cert107.cer  cert131.cer  cert156.cer  cert35.cer  cert5.cer   cert84.cer

cert108.cer  cert132.cer  cert157.cer  cert36.cer  cert60.cer  cert85.cer

cert109.cer  cert133.cer  cert158.cer  cert37.cer  cert61.cer  cert86.cer

cert10.cer   cert134.cer  cert159.cer  cert38.cer  cert62.cer  cert87.cer

cert110.cer  cert135.cer  cert15.cer   cert39.cer  cert63.cer  cert88.cer

cert111.cer  cert136.cer  cert160.cer  cert3.cer   cert64.cer  cert89.cer

cert112.cer  cert137.cer  cert16.cer   cert40.cer  cert65.cer  cert8.cer

cert113.cer  cert138.cer  cert17.cer   cert41.cer  cert66.cer  cert90.cer

cert114.cer  cert139.cer  cert18.cer   cert42.cer  cert67.cer  cert91.cer

cert115.cer  cert13.cer   cert19.cer   cert43.cer  cert68.cer  cert92.cer

cert116.cer  cert140.cer  cert1.cer    cert44.cer  cert69.cer  cert93.cer

cert117.cer  cert141.cer  cert20.cer   cert45.cer  cert6.cer   cert94.cer

cert118.cer  cert142.cer  cert21.cer   cert46.cer  cert70.cer  cert95.cer

cert119.cer  cert143.cer  cert22.cer   cert47.cer  cert71.cer  cert96.cer

cert11.cer   cert144.cer  cert23.cer   cert48.cer  cert72.cer  cert97.cer

cert120.cer  cert145.cer  cert24.cer   cert49.cer  cert73.cer  cert98.cer

cert121.cer  cert146.cer  cert25.cer   cert4.cer   cert74.cer  cert99.cer

cert122.cer  cert147.cer  cert26.cer   cert50.cer  cert75.cer  cert9.cer

cert123.cer  cert148.cer  cert27.cer   cert51.cer  cert76.cer

cert124.cer  cert149.cer  cert28.cer   cert52.cer  cert77.cer

[oracle@apex ~]$ 


作成された証明書を一気に登録します。パスワードに含まれる特殊文字の影響を受けないようにするため、ダブルクォーテーションで囲みます。

for f in cert*.cer
do
orapki wallet add -wallet wallet -cert $f -trusted_cert -pwd "<パスワード>"
done

メッセージとしてOperation is successfully completed.が表示されていれば、証明書は追加されています。すべての証明書が追加されたことを確認したのち、証明書のファイルを削除します。

rm cert*.cer

[oracle@apex0413 ~]$ for f in cert*.cer

> do

> orapki wallet add -wallet wallet -cert $f -trusted_cert -pwd "********"

> done

Oracle PKI Tool Release 23.2.0.0.0 - Production

Version 23.2.0.0.0

Copyright (c) 2004, 2023, Oracle and/or its affiliates. All rights reserved.


Operation is successfully completed.

Oracle PKI Tool Release 23.2.0.0.0 - Production

Version 23.2.0.0.0

Copyright (c) 2004, 2023, Oracle and/or its affiliates. All rights reserved.


Operation is successfully completed.

Oracle PKI Tool Release 23.2.0.0.0 - Production

Version 23.2.0.0.0

Copyright (c) 2004, 2023, Oracle and/or its affiliates. All rights reserved.


Operation is successfully completed.

Oracle PKI Tool Release 23.2.0.0.0 - Production

Version 23.2.0.0.0


[中略]


Operation is successfully completed.

Oracle PKI Tool Release 23.2.0.0.0 - Production

Version 23.2.0.0.0

Copyright (c) 2004, 2023, Oracle and/or its affiliates. All rights reserved.


Operation is successfully completed.

[oracle@apex0413 ~]$ rm cert*.cer


以上でREST呼び出しに使用するウォレットの作成と、Oracle APEXのインスタンスへの設定が完了しました。

続く