App Service 証明書を Apache 2.4.x で使用する

技術情報
公開 2021年9月16日 最終更新 2025年9月9日
Article Image

はじめに

Azure App Service 証明書を使用すると、CSR 作成や認証局への申請、証明書の受け取りといった従来の煩雑な手順を Azure が代行するため、短時間かつ容易に証明書を発行・利用できる。さらに、App Service に限らず、Key Vault から証明書をエクスポートすれば、オンプレや仮想マシン上の IIS や Apache、Nginx などの Web サーバーにも証明書を適用することができる。

以下では Linux ベースの仮想マシンで実行している Apache 2.4.x に App Service 証明書を適用する手順を紹介する。

(1) App Service 証明書を作成

証明書の作成

App Service 証明書 > 作成(図1)

図1 App Service 証明書の作成図1 App Service 証明書の作成

  • ネイキッド ドメインのホスト名:要するにURLのドメイン名
  • 証明書名:任意(Azure ポータルに表示される名称になる)

証明書を Key Vault にインポート

App Service 証明書を使用する場合、証明書の Azure Key Vault へのインポートが必須となる。Key Vault は Azure が提供する秘密情報の保管サービスで、キー、シークレット、証明書の管理のために使用される。Key Vault は日本語ポータルでは「キー コンテナー」という名称で表示される。

証明書の構成(図2) > 「安全に管理するために証明書を Key Vault にインポートします。」をクリック(図3)。

図2 App Service 証明書図2 App Service 証明書

図3 証明書の構成図3 証明書の構成

キー コンテナーから選ぶ(図4) > 新しい キー コンテナー の作成(図5)

図4 Key Vault の状態図4 Key Vault の状態

図5 Azure Key Vault からの キー コンテナー の選択図5 Azure Key Vault からの キー コンテナー の選択

Key Vault 名を入力し、「確認および作成」ボタンを押下(図6)

図6 キー コンテナーの作成図6 キー コンテナーの作成

以下のエラーが発生した場合は、Active Azure Directory でアカウントにグローバル管理者のロールを追加する(参考)。

Key Vault の設定の保存 選択した Key Vault に対するアクセス許可を更新できませんでした。詳細については、下のエラーを確認してください。

作成した Key Vault をキー コンテナーに選択して「選択」ボタンを押下(図7)。

図7 Azure Key Vault からの キー コンテナー の選択図7 Azure Key Vault からの キー コンテナー の選択

以下のエラーが発生した場合、権限が不足している可能性がある。

選択した Key Vault に証明書をリンクできませんでした。詳細については、下のエラーを確認してください。:
The parameter keyVaultCsmId has an invalid value.

キー コンテナー > 作成した Key Vault > オブジェクト > シークレット(図8)

図8 キー コンテナー シークレット図8 キー コンテナー シークレット

「このコンテンツを表示する権限がありません。」と表示される場合は権限がない(図8)。

権限を追加する方法はいくつかあるが、ここでは簡易な手順を紹介する。
設定 > アクセス構成 > 「コンテナーのアクセス ポリシー」を選択して「適用」ボタンを押下(図9)。

図9 キー コンテナー アクセス構成図9 キー コンテナー アクセス構成

アクセス ポリシー > 作成

図10 アクセス ポリシーを 1 つ作成する図10 アクセス ポリシーを 1 つ作成する

プリンシパルには自分のアカウントを選択し、アクセスポリシーを作成する。
あらためて、証明書の構成 > 「安全に管理するために証明書を Key Vault にインポートします。」から、作成した Key Vault をキー コンテナーに選択して「選択」ボタンを押下。

ドメインの所有権を確認

作成した証明書を使用するには、ドメインの所有者であることを証明する必要がある。この確認は ドメインの DNS に指定されたトークンの TXT レコードを作成し、それを Azure が確認するという手順になる。ドメインを Azure で管理している場合は、DNS のレコード作成も Azure が自動的に行ってくれる。

「証明書が Key Vault に正常にインポートされました。」が表示されているのを確認し、「証明書のドメインの所有権を確認します」をクリック(図11)。

図11 証明書の構成図11 証明書の構成

「ドメインの検証を確認しています…」が表示されている場合は、そのまま待つ(図12)。
表示されていない場合は「確認」をクリックして、検証を開始する。

図12 ドメインの検証図12 ドメインの検証

しばらく待つと、以下のように「ドメインの確認に成功しました」が表示される(図13)。

図13 図13

証明書の作成はこれで完了。
次の手順では証明書を Key Vault からエクスポート/ダウンロードする。

(2) 証明書ファイル(*.pfx)のダウンロード

キー コンテナーに移動し、シークレットを選択 ⇒ シークレットの一覧が表示される。
(1) で付けた証明書名の行をクリック(図14)。
図14 シークレット図14 シークレット

最新のバージョンをクリック(図15)。
図15 バージョン図15 バージョン

「証明書としてダウンロード」ボタンをクリック(図16)。

図16 シークレットのバージョン図16 シークレットのバージョン

ダウンロードは以上で完了。

(3) 証明書ファイル(pfx)から秘密鍵、証明書をエクスポート

  1. 秘密鍵をエクスポート
    ※パスワードを求められるが何も入力せずにEnter
    (ダウンロードした証明書ファイル(*.pfx)にはパスワードが設定されていない)
openssl pkcs12 -in 〇〇〇.pfx -nocerts -nodes -out server.key
  1. 証明書をエクスポート
    ※パスワードを求められるが何も入力せずにEnter
openssl pkcs12 -in 〇〇〇.pfx -clcerts -nokeys -out server.crt

中間証明書について

証明書ファイル(*.pfx)には中間証明書の情報も含まれている。モダンブラウザでは、サーバーが中間証明書を送信しなくても、AIA(Authority Information Access)1 を利用して必要な中間証明書を取得し、HTTPS 接続を正常に確立できる場合がある。ただし、デバイスによっては接続に失敗する場合があるので、万全を期すのであれば、中間証明書を配置した方がよい。

以下のコマンドで中間証明書を含んだすべての証明書をエクスポートできる。

openssl pkcs12 -in 〇〇〇.pfx -nokeys -out all.crt
  • Apache 2.4.8 以降の場合
    Apache 2.4.8 以降の場合は、SSLCertificateFile にサーバー証明書+中間証明書を指定できるので、このファイルをそのまま使用すればよい。中間証明書を別に指定する方式は 2.4.8 以降では非推奨2になっている。
  • Apache 2.4.8 未満の場合
    Apache 2.4.8 未満の場合、中間証明書とサーバー証明書は別ファイルで指定する必要がある。*.crt ファイルはプレーンなテキストファイルなので、テキストエディタを使用してファイルを分割することになる。CN(Common Name)の文字列でサーバー証明書とそれ以外を判別することができる。

(4) mod_ssl のインストール

yum -y install mod_ssl

/etc/httpd/conf.d/ssl.conf が作成される。
ssl.conf を編集して、証明書ファイルと秘密鍵ファイルのパスを設定する。

vi /etc/httpd/conf.d/ssl.conf

SSLCertificateFile      /etc/pki/tls/certs/server.crt  # 証明書
SSLCertificateKeyFile   /etc/pki/tls/certs/server.key  # 秘密鍵
SSLCertificateChainFile /etc/pki/tls/certs/chain.crt   # 中間証明書(Apache 2.4.8 未満の場合)

Apache の再起動

apachectl configtest
systemctl restart httpd

注意事項

  • SELinux が有効の場合
    SELinux が有効の場合は、追加の設定を行わないと正しく動作しない。手っ取り早く証明書の確認を行いたい場合は、SELinuxを無効にする(要サーバー再起動)。
vi /etc/selinux/config
...
SELINUX=disabled     ← enforcing から disabled に変更
  • ファイアウォールが動いている場合、443ポートの開放する。

証明書の更新

証明書の更新については App Service 証明書の更新 Apache 2.4.x を参照

参考資料

Azure Key Vault とは | Microsoft Learn
Apache2.4でHTTPS通信を行うための環境構築手順と詰まりどころ
pfx形式のSSL証明書をpem形式に変換する
PKCS#12(pfx)形式から、秘密鍵、公開鍵形式への変換方法
ダウンロードした証明書ファイル(*.pfx)にはパスワードが設定されていない

脚注

  1. サーバー証明書における AIA の役割|BLOG| サイバートラスト

  2. SSLCertificateChainFile Directive

    SSLCertificateChainFile became obsolete with version 2.4.8, when SSLCertificateFile was extended to also load intermediate CA certificates from the server certificate file.