QNAP、Web管理画面へのアクセスがhttp通信のためブラウザで「保護されていない通信」と出てしまいます。

ローカル運用だからといっても多くのマルウェアは「ついでに」というより「こっちが本命」と言わんばかりにNASを狙うパターンが多いため、
(↑ 建前 ↑)
(↓ 本音 ↓)
こちらの美意識にそぐわないためSSL証明書を自前で設定します。

環境

別に以下の環境があることが要件です。

  • インターネットに接続されているLinuxサーバ。
    • Let's Encrypt(certbot)導入済み
  • 独自ドメインがあること。
    • そのDNSレコードを設定することができること。

さっくりとした手順

  1. certbotで証明書を発行します。
  2. 適切な手段でローカル環境に保存します。
  3. NAS(TS-216G)に適用します。

Let’s Encryptで証明書を発行。

  • 証明書発行

以下、

  • -d ドメイン
  • -m 自分のメールアドレス

に置き換えます。

sudo certbot certonly --manual \
-d star.hoge.example.com \
-m hoge@example.com \
--agree-tos \
--key-type rsa \
--preferred-challenges dns-01

この、key-type rsaを付けなかったことがはまりポイントでした。というのも、ここ数年、Let's EncryptはECDSA方式をデフォルトで発行していますが、QNAPのOSは最新の暗号化に対応していません。そのため、RSAと「強度を下げて広く使われる形式」と明示する必要があります。

  • ドメイン所有者手続き

その後、DNSで、指定されたTXTレコードを登録せよという指示がありますので、それに従ってDNSを設定します。

このとき、TTLは60などと極めて短い時間にしておくと良いでしょう。(3600などとするとかなり待たされます)

証明書の整合性を確認

  • 90日の有効期限であることを確認します。

以下、自分が発行したドメインに基づく証明書や秘密鍵に読み替えます。

sudo openssl x509 -noout -dates -subject -in /etc/letsencrypt/live/star.hoge.example.com/fullchain.pem
notBefore=May 17 04:35:55 2025 GMT
notAfter=Aug 15 04:35:54 2025 GMT

のように90日間であることを確認します。

  • 確認1. 証明書から公開鍵データを確認
sudo openssl x509 -pubkey -in /etc/letsencrypt/live/star.hoge.example.com/fullchain.pem -noout | openssl md5
  • 確認2. 秘密鍵から公開鍵を取得
sudo openssl pkey -pubout -in /etc/letsencrypt/live/star.hoge.com/privkey.pem | openssl md5

→ 確認1/確認2で出てきた公開鍵のハッシュ値が一致していればOKです。

SSL証明書と秘密鍵をローカル環境に保存

発行されたら、以下のファイルを適切な方法でローカルに保存します。

  • /etc/letsencrypt/live/star.hoge.example.com/fullchain.pem
  • /etc/letsencrypt/live/star.hoge.com/privkey.pem

この時の保存はcatコマンドで表示して自分の環境にファイルを貼り付けるのが結果的に効率的ではありますが、privkey.pemは管理者権限でしか読めない(600)となっているため、

sudo cat /etc/letsencrypt/live/star.hoge.com/privkey.pem

としないと閲覧できません。

そうしてローカル環境に保存します。

QNAPへの運用

  1. ブラウザでQTSにログインし、[コントロールパネル] を開きます。
  2. [システム] > [セキュリティ] の順に進みます。
  3. 上部のタブから [証明書とプライベートキー] を選択します。
  4. [証明書の置換] ボタンをクリックします。
  5. 「証明書のインポート」を選択し、以下のファイルをそれぞれアップロードします。
  • 指定するファイルの対応表
項目ファイルの種類内容
プライベートキー**.key証明書発行時に生成した秘密鍵
証明書.crt または .pem認証局から発行されたドメイン証明書
中間証明書 (任意).crt または .pem認証局のチェーン証明書(推奨)
  1. [適用] をクリックします。これで、NASのWeb管理画面(HTTPS)に証明書が適用されます。

適用後の確認

設定が完了したら、以下の点を確認してください。

  • ブラウザの鍵マーク: NASにドメイン名(例:https://star.hoge.example.com:8081)でアクセスし、ブラウザのURL横にある鍵アイコンが正常(「この接続は保護されています」)になっているか確認します。
  • 有効期限: QTSの「証明書とプライベートキー」画面で、表示されている有効期限が正しいか確認します。

注意点とTips

証明書一式をインポートしたのに適用できない

ECDSA形式で発行しているパターンがほぼ大多数です。筆者はこれに一週間ほどハマり、「自分のブログメモ」に助けられました。

ポート開放とアクセス

自前証明書を適用しても、ローカルIPアドレス(192.168.x.x)でアクセスした場合は「保護されていない通信」と表示されます。必ず証明書に記載されたドメイン名でアクセスしてください。

しかし、これはある意味チャンスです。Let's Encryptは90日しか有効期限がないため、期限切れで

https://star.hoge.example.com:8081

とアクセスした場合、ブラウザでエラーが出ますが、ローカルIPアドレス直打ちはその範疇ではありません。

証明書の更新

自前の証明書(特に Let's Encrypt 以外を外部で取得したもの)は自動更新されません。有効期限が切れる前に、上記の手順で新しいファイルを再度インポートする必要があります。

myQNAPcloud を利用している場合

もし myQNAPcloud の DDNS 機能を利用している場合、QTS側で「myQNAPcloud証明書」が優先されていることがあります。その場合は、上記手順の「証明書の置換」で自前のものを優先するように設定を変更してください。