OCIのロードバランサーでHTTPをHTTPSにリダイレクトする

はじめに

こんにちは、技術部の内藤です。

前回の記事 Let's Encryptで発行した証明書とOCIの証明書サービスでOCIのロードバランサーをHTTPS化する では、Let's EncryptのTLS証明書をOCIの証明書サービスにインポートし、ロードバランサーでHTTPS化を行いました。

今回はその続きとして、HTTPでアクセスされた場合に自動的にHTTPSにリダイレクトする設定を説明します。OCIのロードバランサーでは、ルールセット機能を使ってHTTPからHTTPSへのリダイレクトを実現できます。

ロードバランサーのルールセット

OCIのロードバランサーのルールセット機能は、リクエストやレスポンスを処理する際に特定のルールを適用できる機能です。

主な用途として以下があります。

  • HTTPからHTTPSへのリダイレクト
  • リクエストヘッダーの追加・削除・変更
  • レスポンスヘッダーの追加・削除・変更
  • パスベースのルーティング

詳しくは、公式の資料をご覧ください。

リダイレクト用ルールセットの作成

HTTPからHTTPSへのリダイレクトを行うルールセットを作成します。

  1. ロードバランサーの詳細画面のメニューから「ルール・セット」を選択
  2. 「ルール・セットの作成」ボタンをクリック
  3. 以下の設定を行います
  • 名前: http_to_https_redirect
    • なお、ルールセットの名前には、記号はアンダースコアしか使えません
  • URLリダイレクト・ルールの指定: オンにする
  • ソースのパス: /
  • 一致タイプ: 最長接頭辞の強制一致
  • それ以外の各項目はデフォルト値から以下のみ変更
    • プロトコル: HTTPS
    • ポート: 443
    • ステータスコード: 301

完全なURL だと https://{host}:443/{path}?{query} です。

ルールセットの設定

この設定により、HTTP(ポート80)へのすべてのリクエストが、同じホスト名・パス・クエリパラメータを維持したままHTTPS(ポート443)にリダイレクトされます。

(まだの場合)HTTPリスナーの作成

前回の記事でHTTPS(ポート443)のリスナーは作成済みですが、HTTPのリスナーがない場合は作成しましょう。HTTPSリスナーも作成していない場合は、前回の記事を参考に作成してください。

ロードバランサーの詳細画面から「リスナー」を選択し、「リスナーの作成」をクリックします。

以下の設定でHTTPリスナーを作成します。

  • 名前: http-Listener (任意の名前)
  • プロトコル: HTTP
  • ポート: 80
  • バックエンドセット: 既存のバックエンドセットを選択

HTTPリスナーにルールセットを適用

作成したルールセットをHTTPリスナーに適用します。

  1. リスナーの編集画面を開く
  2. 「ルールセット」の項目で、先ほど作成した http_to_https_redirect を選択
  3. 「変更の保存」をクリック

リスナーにルールセットを設定

設定が完了すると、HTTPリスナーにルールセットが適用されます。

(まだの場合)NSGの設定

ロードバランサーにアタッチしているNSGで、TCPのポート80(HTTP)のアクセスを許可してください。

動作確認

設定が完了したら、実際にリダイレクトが動作するか確認してみましょう。

ブラウザで http://xxx.jp にアクセスしてみてください。自動的に https://xxx.jp にリダイレクトされることを確認できます。

もちろん、curlコマンドでも確認できます。ステータスコード301とLocationヘッダーでHTTPSのURLが返されます。

# リダイレクトの詳細を確認
curl -I http://xxx.jp

# 出力
HTTP/1.1 301 Moved Permanently
# 略
Location: https://xxx.jp/
# 略

おわりに

現代のWebでHTTPでアクセスさせることはほぼないので、HTTPのリクエストはHTTPSにリダイレクトさせてあげましょう。

Let's Encryptで発行した証明書とOCIの証明書サービスでOCIのロードバランサーをHTTPS化する

はじめに

こんにちは、技術部の内藤です。

前回の記事 Oracle LinuxでcertbotによるLet's EncryptのTLS証明書発行 では、Oracle Linuxでcertbotを使ってLet's EncryptのTLS証明書を発行しました。

今回はその続きとして、発行したTLS証明書をOCIのロードバランサーで使用する方法を説明します。具体的には、certbotで発行した証明書をOCIの証明書サービスにインポートし、ロードバランサーのHTTPS用のリスナーで利用します。

証明書ファイルの確認

まず、certbotで発行された証明書ファイルを確認します。

sudo ls -la /etc/letsencrypt/live/xxx.jp/

以下のファイルが存在することを確認してください。

  • cert.pem
  • chain.pem
  • fullchain.pem
  • privkey.pem

OCIの証明書サービスにインポートする際は、以下のファイルを使用します。

  • 証明書: cert.pem
  • 証明書チェーン: chain.pem
  • 秘密鍵: privkey.pem

証明書ファイルの内容を取得

証明書をOCIにインポートするため、各ファイルの内容をコピーします。

# 証明書の内容を表示
sudo cat /etc/letsencrypt/live/xxx.jp/cert.pem

# 証明書チェーンの内容を表示
sudo cat /etc/letsencrypt/live/xxx.jp/chain.pem

# 秘密鍵の内容を表示
sudo cat /etc/letsencrypt/live/xxx.jp/privkey.pem

それぞれの内容をエディタなどに控えておきます。

OCIの証明書サービスに証明書をインポート

以下の手順で、証明書の作成に進みます。

  1. OCIコンソールにログイン
  2. 「証明書」を検索して選択
  3. 「証明書の作成」ボタンをクリック

「基本情報」で以下を設定します。

証明書タイプは インポート済 を選択し、名前や説明はわかりやすいように入力します。

証明書作成1

「サブジェクト情報」は インポート済 だとなにも設定できないため次へ。

「証明書構成」で、先ほどコピーした内容を貼り付けます。

  • 証明書: cert.pem の内容を貼り付け
  • 証明書チェーン: chain.pem の内容を貼り付け
  • 秘密鍵: privkey.pem の内容を貼り付け

注意点として、各ファイルの内容は、-----BEGIN CERTIFICATE----------BEGIN PRIVATE KEY----- などのヘッダーとフッターや、改行や空白文字も含めてすべて貼り付けてください。

証明書作成2

あとは画面の指示に従って進めば、インポートした証明書の作成は完了です。

ロードバランサーでHTTPS化

次に、ロードバランサーに証明書サービスで作成した証明書を使ってHTTPS化してみましょう。

ロードバランサーを作成したことがない方は、公式のチュートリアルなどを参考に作成してください。

NSGの設定などは省略します。

HTTPS リスナーの設定

以下のようなリスナーを作成します。

  • プロトコル: HTTPS
  • ポート: 443
  • SSLの使用: ON
  • 証明書リソース: 証明書サービス管理対象証明書
    • 先ほどインポートした証明書を選択

リスナー設定1

古いブラウザは対象にしないサービスなら、 拡張オプションの表示 を押して以下を設定し、セキュリティを高めましょう。

  • TLSバージョン: TLS 1.3 のみ指定
  • 暗号スイートの選択: oci-tls-13-recommended-ssl-cipher-suite-v1

TLS設定

(まだの場合)DNS設定

xxx.jp の向き先をロードバランサーにしていない場合は、ゾーンに、以下のようにAレコードを追加します。

  • レコード名: xxx.jp
  • レコードタイプ: A
  • レコード値: ロードバランサーのIPアドレス
  • TTL: 86400 ※あまり変更しない前提で1日にしていますが、必要に応じて変更してください

DNS設定

ここまで設定すれば、HTTPSで xxx.jp にアクセスできるようになります。

ロードバランサーのバックエンドに、ApacheやNginxが起動しているインスタンスを設定すれば、ブラウザから https://xxx.jp にアクセスして、HTTPSでの通信ができることを確認できます。

おわりに

やはりACMのようなサービスがないのは辛いですが、Let's EncryptやOCIの証明書サービスに慣れて、OCIでのHTTPS化を円滑に行っていきましょう!