本記事では,Let's encryptの証明書をDNS認証で取得し,それを使ってNextCloudのHTTPS化設定をする方法を記載します.
DNS認証部分はDNS・DDNSサービスによって異なりますが,私が使用しているMyDNSの事例を記載いたします.MyDNSでは,Let's encryptのDNS認証を行うためのAPIとPHPスクリプトを用意してくれています.そのため,これをありがたく利用させてもらいます.
1. PHPをインストール
まずPHPスクリプトを実行するため,PHPをインストールします.これは,NextCloudをインストールした際に一緒にインストールされたPHPとは別でインストールしておく必要があります.(PHPが/usr/bin/以下に設置されていることが,PHPスクリプト実行の必要環境のため)sudo apt update
sudo apt install -y php
sudo apt install -y php7.4-mbstring
2. Certbotインストール
続いて,Let's encryptのクライアントであるCertbotをインストールします.sudo apt install certbot python3-certbot-apache
3. MyDNSのLet's encrypt用APIをたたくPHPスクリプトの実行
まずスクリプトをダウンロードして展開します.実行場所はrootから触れればどこでもよいです.cd /home/user/working_directory/
wget 'https://github.com/disco-v8/DirectEdit/archive/master.zip' -O DirectEdit-master.zip
unzip ./DirectEdit-master.zip
cd DirectEdit-master
chmod 700 ./*.php
chmod 600 ./*.conf
続いて,スクリプトの設定ファイルtxtedit.conf を編集し,以下3行を書き換えます.ここはMyDNSのログインID・パスワードとドメイン名を入力します.
$MYDNSJP_MASTERID = 'yourmasterid';
$MYDNSJP_MASTERPWD = 'yourpasswd';
$MYDNSJP_DOMAIN = 'yourdomain';
ここまで出来たら,certbotコマンドを実行します.最初は"--dry-run"オプションをつけて実行します.この場合,コマンドの動作の確認だけを行い実際のLet's encryptの認証はしませんので,オプションにミスなどないか確認できます.その後"--dry-run"オプションを外して実行します.
certbot certonly \
--dry-run \
--manual \
--preferred-challenges=dns \
--manual-auth-hook /home/user/working_directory/DirectEdit-master/txtregist.php \
--manual-cleanup-hook /home/user/working_directory/DirectEdit-master/txtdelete.php \
-d xxxxxxx.mydns.jp -d *.xxxxxxxx.mydns.jp \
--server https://acme-v02.api.letsencrypt.org/directory \
--agree-tos -m your@emailaddress.com \
--manual-public-ip-logging-ok
コマンドがうまく通ると,Emailを登録しますか?と聞かれます.Let's encryptに関連する情報が通知されるようになるそうです.任意ですが,今回はNoとしておきます.
"Congratulations!..."というメッセージが出たら成功です.certbotによって証明書が保存されます.私の場合,"/etc/letsencrypt/live/xxxxxx.mydns.jp/"に保存されました.この場所をメモしておきます.
4. NextCloudでLet's encryptの証明書を用いてhttpsを有効化
certbotによって得られたcert, key, chainファイルを,それぞれNextCloudが参照可能なフォルダに移動します.
NextCloudが参照可能なフォルダは以下のコマンドで調べられます.
sudo nextcloud.enable-https custom -h私の場合,"/var/snap/nextcloud/current/letsencrypt"というフォルダを作り,ここにコピーしました.
sudo cp /etc/letsencrypt/live/xxxxxx.mydns.jp/cert.pem /var/snap/nextcloud/current/letsencrypt
sudo cp /etc/letsencrypt/live/xxxxxx.mydns.jp/chain.pem /var/snap/nextcloud/current/letsencrypt
sudo cp /etc/letsencrypt/live/xxxxxx.mydns.jp/privkey.pem /var/snap/nextcloud/current/letsencrypt
これでNextCloudから証明書が見えるようになりましたので,この証明書ファイルを使ってNextCloudのhttpsを有効化します.
sudo nextcloud.enable-https custom /var/snap/nextcloud/current/letsencrypt/cert.pem /var/snap/nextcloud/current/letsencrypt/privkey.pem /var/snap/nextcloud/current/letsencrypt/chain.pem
"https//[IPアドレス]:23456"にアクセスし,NextCloudの画面が表示できるか確認します.
これで,ポート80, 443などを使わなくともNextCloudをLet's encryptでhttps化できました.
参考サイト
- MyDNSでLet’s Encryptのワイルドカード証明書を自動更新する – Ideal Reality
- Ubuntu 20.04でLet’s Encryptを使用してApacheを保護する方法 | DigitalOcean
- Setup SSL Ubuntu snap DNS validated TLS cert letsencrypt [SOLVED] - 🚧 Installation - Nextcloud community