2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Oracle Cloud Infrastructure の DBCS上で動かしている APEX に フリーの証明書を入れる

Last updated at Posted at 2021-03-31

はじめに

Oracle Cloud Infrastructure(OCI) の DBCS上で Application Express(APEX)を動かしています。
SSLサーバ証明書に いわゆるオレオレ証明書を使っているのですが、それをやめて Let's Encrypt という認証局が無償で発行する証明書を入れたいと思います。Let's Encrypt 初めて使います。

手順

0. ドメインを取得します(ない場合)

無料でドメインを取得したい場合は、下の記事を参考に Freenom という無料ドメインプロバイダでドメインを取得します。Freenom も初めて使います。

ドメイン取得後、[Manage Freenom DNS]画面で、Targetの部分にはDBシステムのパブリックIPアドレスを入れておいてください。

1. snap からの certbot インストール

Let's Encrypt の証明書は certbot というのを使って取得するらしいです。
certbot は snap を使ってインストールするようです。
なので snap インストールと certbot インストールをまず行います。
https://snapcraft.io/docs/installing-snap-on-centos を参考に以下行います。
DBシステムにSSHでログインして、以下を実行します。

$ sudo yum install snapd
$ sudo systemctl enable --now snapd.socket
$ sudo ln -s /var/lib/snapd/snap /snap

上実行後 DBシステムを再起動します。
https://certbot.eff.org/lets-encrypt/centosrhel7-other に従い以下実行します。

$ sudo snap install core
$ sudo snap refresh core

既存のcertbotがあれば削除します。

$ sudo yum remove certbot

certbotをインストールします。

$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Firewallのポート80を開けます。やり方は下の記事の「4.ファイアーウォールの設定」を参考にし、今回は8443でなく80を開けてください(参考資料と同様、DBシステムのファイアーウォールとVCNのセキュリティリストの両方に設定が必要です)。

下はDBシステムのファイアーウォールの80番ポートを開ける例です。

$ sudo iptables -I INPUT 8 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT -m comment --comment "Required for certbot"
$ sudo /sbin/service iptables save

2. certbot による証明書取得

以下実行します。途中でドメイン名を聞いてくると思うので、Freenom で取得したドメイン名を入れます(ちなみにドメイン名の代わりに IP Address入れてみたのですがダメでした)。

$ sudo certbot certonly --standalone

完了すると、下のようなメッセージが出ると思います。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/<ドメイン名>/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/<ドメイン名>/privkey.pem
   Your certificate will expire on 202X-XX-XX. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again. To non-interactively renew *all* of your
   certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

/etc/letsencrypt/live/<ドメイン名>/fullchain.pem が証明書
/etc/letsencrypt/live/<ドメイン名>/privkey.pem が秘密鍵
のようです。
上のパスのうち、live ディレクトリのモードが0700なのと、privkey.pem の link先のファイルのモードが0600なので、変更する必要がありそうです。

$ sudo chmod 0755 /etc/letsencrypt/live
$ sudo chmod 0755 /etc/letsencrypt/archive
$ sudo chmod 0644 /etc/letsencrypt/archive/<ドメイン名>/privkey1.pem

standalone.properties ファイルを編集します。

3. Oracle REST Data Service (ORDS) の構成ファイル変更

ORDSをスタンドアロン・モードで動かしている場合、下のマニュアルの「1.4.1.1 DERへの秘密キーの変換(LinuxおよびUNIX) 」の記述に従い、秘密鍵をDERへ変換し、standalone.properties に証明書と秘密鍵のエントリを変更します。

$ cd /etc/letsencrypt/live/<ドメイン名>
$ sudo openssl pkcs8 -topk8 -inform PEM -outform DER -in privkey.pem -out privkey.der -nocrypt

下の様にstandalone.properties を編集します。
https://qiita.com/ayamakkk/items/e150b485fc64997b40bc に従って APEX をインストールした場合だと、このファイルは $ORACLE_HOME/apex20/config/ords/standalone にあります。

ssl.cert=/etc/letsencrypt/live/<ドメイン名>/fullchain.pem
ssl.cert.key=/etc/letsencrypt/live/<ドメイン名>/privkey.der

ORDS をスタンドアロン・モードで起動します。

最後に

Let's Encrypt から発行される証明書の有効期限は90日ですが、期限内に更新すればずっと使えます。

$ sudo certbot renew

で再発行されるようです(まだ試してません。テスト実行 sudo certbot renew --dry-run は行いました)。
(参考になる記事を参照しながら)いずれ cron を使って更新を自動化しようと思います。
ORDSスタンドアロン・モードの場合、自動化するなら証明書の更新だけでなく、秘密鍵をDERに変換するところも自動化する必要がありますね。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?