ProxmoxでLet's Encryptを使用した証明書セットアップをやってみた

■はじめに

Proxmoxはデフォルトで自己証明書を使用しています。

このため、管理コンソールにアクセスすると「接続がプライベートではありません」といった画面が表示されます。

これの対処方法の一つとして、Let's Encryptを使用して簡単に証明書がセットアップできるとのことで、実際にやってみた内容を紹介したいと思います。


■前提

・自宅のProxmox環境(シングル構成)で実施

・証明書取得時に使うのはDNS-01チャレンジ

  HTTP-01チャレンジはWebサーバーを公開する必要があるためパス

・ハードル低めの(APIが使える)DNS Providerからドメインを取得して使用

  下記の中からCloudflareをDNS Providerとして選択

   How to use DNS API wiki


■手順概要

Cloudflareのアカウント作成~証明書反映まで、ということで実施内容としては下記となりました。

=====

1.Cloudflare アカウントの作成

2.Cloudflare ドメイン取得

3.Cloudflare アカウント APIトークンの作成

  - ゾーン DNS を編集する権限を持つAPIトークンを作成

4.Cloudflare アカウント IDの取得

  - ProxmoxのChallengeプラグインに投入するパラメータの取得

5.Proxmox ACME アカウントの追加

  - 連絡先登録と利用規約への同意

6.Proxmox Challengeプラグインの追加

  - Cloudflareのパラメータを投入

7.Proxmox ACME ドメインの追加

  - 取得したいドメイン(FQDN)を設定

8.Proxmox 証明書の取得

  - 証明書取得処理を手動開始

=====


■実施手順

1.Cloudflare アカウントの作成

Cloudflareのサイトにアクセスして画面右上の「ログイン」をクリックします。
 https://www.cloudflare.com/ja-jp/

ログイン画面に遷移するので、下部にある「サインインアップ」をクリックします。

登録するメールアドレスとパスワードを入力、ロボットでないこと確認にチェックを入れて「サインアップ」をクリックします。
アカウントが作成されます。

登録したメールアドレスに確認メールが来るので、メールに記載のURLにアクセスして本人確認を行っておきます。


2.Cloudflare ドメイン取得
作成したアカウントでCloudflareにログインします。

ダッシュボードが表示されるので、左ペインにて [ドメイン登録] > [ドメインの登録] とクリックします。

取得したいドメインを検索し、画面に従って登録手続きを進めます。

当然ながら登録者情報にて住所などの入力が求められますが、WHOISで公開される情報はデフォルトで「DATA REDACTED」表示やCloudflareのものに置き換えられます。
見た限りでは、入力した情報のうち公開されるのは国と都道府県ぐらいのようです。


3.Cloudflare アカウント APIトークンの作成
左ペインにて [アカウントの管理] > [アカウント API トークン] とクリックし、遷移した画面にて「トークンを作成する」をクリックします。

遷移した画面にて [ゾーン DNS を編集する] 横の「テンプレートを使用する」をクリックします。


遷移した画面にて一部変更して「概要に進む」をクリックします。 ※デフォルトのままでも問題はないです。
 ●変更箇所
  ・[トークン名]      : デフォルトは和訳そのままで微妙な名前なので、適当に変更
  ・[ゾーン リソース]   : 対象とするドメインを指定

確認画面が表示されるので、「トークンを作成する」をクリックします。

トークンが作成されるので、トークンを控えておきます。
 ※このトークは事後確認できないため、控え損なった場合は再作成となります。


4.Cloudflare アカウント IDの取得
左ペインにて [アカウント ホーム] をクリックし、取得したドメインをクリックします。

遷移した画面の右下にある [アカウント ID] を控えておきます。

Cloudflareでの操作は以上となります。

手順3, 4で控えた下記のパラメータは、後ほどProxmoxでの設定で使用します。
 ・アカウント APIトークン
 ・アカウント ID


5.Proxmox ACME アカウントの追加
Proxmoxの管理コンソールにログインして [データセンター] > [ACME] と遷移します。

アカウントの「追加」をクリックします。


下記のように入力して「登録」をクリックします。
 ・[アカウント名] : 任意の名前
 ・[E-Mail]     : 連絡先メールアドレス
 ・[TOS受諾]   : チェック

アカウントが追加されます。


6.Proxmox Challengeプラグインの追加
ACME画面にて、Challenge プラグインの「追加」をクリックします。

下記のように入力して「追加」をクリックします。
 ・[プラグインID]   : 任意の名前
 ・[DNS API]      : Cloudflare Managed DNS
 ・[CF_Account_ID]   : Cloudflare アカウント ID
 ・[CF_Token]      : Cloudflare アカウント APIトークン


7.Proxmox ACME ドメインの追加
[データセンター] > [ホスト名] > [システム] > [証明書] と遷移します。

証明書追加前は下記のような状態(赤枠のところにファイルが2つある)となっています。

ACMEの「追加」をクリックします。

下記のように入力して「作成」をクリックします。
 ・[Challengeタイプ] : DNS
 ・[プラグイン]     : 手順6で追加したプラグインを指定
 ・[ドメイン]     : ProxmoxサーバのFQDNを入力


8.Proxmox 証明書の取得
ACME ドメインが追加されていることを確認し、「Order Certificates Now」をクリックします。

証明書の取得処理が開始し、終了すると pveproxy が再起動します。

再度管理コンソールにアクセスすると、取得したSSL証明書が使用されていることが確認できます。

また、証明書画面を確認すると、Let's Encryptの証明書ファイルが追加されていることも確認できます。
(追加前はファイルが2つでしたが、3つ目としてLet's Encryptのものが表示されています)


■まとめ
CloudflareとLet's Encryptの組み合わせにより、「Order Certificates Now」をクリックするだけで、証明書の取得&自動差し替えをすることができました。

他のDNS ProviderでもLet's Encryptと組み合わせることができますが、ぱっと見ではCloudflareが一番簡単そうでした。
中にはひと手間必要なものなどもありそうですが、Proxmoxはコミュニティ活動が活発なため、躓いたときはSupport Forumを頼りにチャレンジしてみると良いと思います。

コメント

このブログの人気の投稿

AIと共に「考える」エンジニアに!

ルーティングって何で必要で、何してるの?を React Routerで理解する