「SSL」タグアーカイブ

QNAP:複数ドメインでSSL認証とBASIC認証の設定が面倒だったので

はじめに

QNAPで複数サイトを仮想ホストで立ち上げました。
その後、Let’s encryptでSSL認証を行ったのですが、5~6サイト以上設定しようとすると認証が取れない状態になってしまいました。
また、仮想ホストで指定したフォルダの場所が日本語(2バイト文字)を含むパスになっていて、どうにも.htpasswdの指定がエラーになってしまったので、その時の対処方法をまとめてメモします。

複数サイトを仮想ホストで準備する

多少説明を割愛します。
まず、Webサーバを準備するところから始めます。
QNAPのコントロールパネルを開くと、デフォルトでシステムポートに80ポートが使われていたりします。
この状態では、Webサイトで80ポートが使えず、後々Let’s encryptの設定が出来ません。
そこで、まずは、デフォルトのシステムポートを80以外(例:8080)にします。
同様に、HTTPS(SSL)のポート番号も443から別のポートに変更しておく必要があります。
こんな感じです。

コントロールパネル:システム


その後、コントロールパネル→アプリケーション→Webサーバで、Webサーバを有効にし、各ポート番号を変更してデフォルトの80ポートと443ポートが利用できる状態にしておきます。
こんな感じです。

コントロールパネル:Webサーバ

更に、「仮想ホスト」を有効にして、仮想ホストを画面の指示に従って設定します。
仮想ホストの対象フォルダは、NAS上のどこでも指定出来るみたいなので、自由度が高いのですが、それが後の後悔に繋がりました。
日本語(2バイト文字)を含むフォルダを指定したことで、後々苦労することになりました。
ちなみに、サイトを作成する際は、HTTPS(443)サイトだけを作るのではなく、HTTP(80)サイトも同じフォルダーを指定して両方作る必要があります。

Let’s encryptでSSL認証を行う。(失敗編)

複数サイトを構築する場合でも、2~3サイト/ドメインであればこの方法でも何とかなると思います。それでも面倒ですけど・・・

SSL認証を設定します。
お名前.comを利用して、ドメインを取得しました。
DNS認証にすれば良かったのですが、諸々の事情で複数のドメイン管理サイトでドメインを取得していたこともあり、安易にDNS認証やワイルドカードによる認証で回避が難しく、一つ一つ登録することを試みました。

コントロールパネル:セキュリティ

コントロールパネル→セキュリティ→証明書とプライベートキーから設定を行います。
Let’s encryptで認証を行う場合は、この「証明書の交換」を使用すると以下の画面が表示されます。

Let’s encryptで認証を指定
認証設定

ドメインには、DNSに指定したドメインを指定します。
メールは有効期限前の案内などが送られてきます。
「代替名(任意)」は、エイリアスですね。
複数サイトの認証を行う場合には、この「代替名(任意)」を利用して設定出来る様です。
但し、「ドメイン名」で指定できるのは1ドメインだけで、2つ目を「代替名(任意)」に指定することで認証が出来ました。
最初に1つだけ設定して、次に、1つ目に指定したドメインを代替名に指定し、新しい2つ目のドメインをドメイン名に指定する・・・これを繰り返すのか!?
でも、これを繰り返すしかないのか!?繰り返せば、もっと多くのドメインを登録できるのか?と戦々恐々としながらトライしてみました。

結論として、4~5ドメイン/サイトであれば登録出来ました。
その後、全く追加出来ない状態に陥ります。

尚、一つドメインを登録する毎に、QNAP画面のリロードを要求され最初の画面に戻ってから作業を繰り返すという面倒な仕様です。

やるならDNS認証だと思います!

きっと私の環境が悪いのでしょう。
本来であればDNS認証でDNSのTXTレコードを設定して・・・ということなのですよ。
でもね。TXTレコードを書けないDNSを併用していたため、どうにも逃げ道が無かったんです。
DNS認証の方法については、別の方が書かれているので他を参考にしてください。
気持ち的には、さくらの環境を使う方法が自動化も容易そうで羨ましいなぁと思いました。

Let’s encryptをマニュアルで!

結局ここなんですよね。
自動化は諦めました。
何方か自動化出来る提案があったら教えてください。
私の場合は環境の問題で無理ですが、お名前.comで認証出来ると嬉しかったなぁ~

さて、始めます。
Let’s Encryptを利用できるよう準備します。
たくさん書いている人がいるので、環境構築はご自由にしてください。
私は、適当に空いてたCentOSの仮想マシンを使いました。
きっと、認証専用マシンになるでしょう・・・(TT)

こんな感じです。

ここで、「Press Enter to Continue」を見てエンターキーを打ちたくなりますが、まずサイトが保存されいている場所に上のBで指定されているファイルを作成する必要があります。

こんな感じでファイルを作ります。

作り終わったら、エンターを押して次に進みます。

認証したいドメイン数分これを繰り返すことになります。

失敗した場合には認証が行われませんが、再度同じコマンドを実行したり、ドメインを追加して実効する際には、前に認証されているドメインは省略してくれます。

とは言え、失敗を繰り返すとLet’s encrypt側から一時的に認証を拒否される場合もありそうなので、失敗しない様に心がけましょう。

最終的に、以下のコメントが表示されます。

/etc/letsencrypt/live/xxxx.site(xxxx.siteには対象のドメインが示されます。)に認証ファイルがシンボリックリンクされて作成されます。

QNAPに認証ファイルを登録する。

先程作成した認証ファイルをQNAPに登録します。

失敗時?と同じように、QNAPのコントロールパネル→システム→セキュリティ→証明書とプライベートキーで「証明書の交換」をクリックし以下の画面を開きます。

証明書の交換:インポート
証明書のインポート

証明書のインポート画面で先ほど作ったファイルを登録します。
それぞれ以下の様になります。

証明書      :  cert.pem
プライベートキー :  privkey.pem
中間証明書(任意):  chain.pem

中間証明書が必要だったかどうかまでは知りません!
ここまで来て失敗するのが面倒だったんです!!

適用をクリックして、何も表示されるずに終了し、「リロード」を促されたら成功です!
再度最初の画面に戻ってください。

証明書の取得および登録は以上で完了です!お疲れ様でした!!

とはならないんですよね。。。。
まず、この状態では、HTTPでアクセスするとそのままHTTPアクセスが維持されます。
HTTPSでアクセスすれば当然HTTPSでアクセスされます。
ドメイン認証された方には判ると思いますが、自動でHTTP→HTTPSの変換/リダイレクトはやってくれません。
自分で書く必要があります。
サイトのトップに.htaccessを記載します。
好みもあると思いますが、簡単にこんな感じです。

説明は省略しますが、HTTPSじゃないアクセスがあったら、httpsに変えてアクセスしなおすことになります。

BASIC認証

BASIC認証では、.htpasswdの場所を.htaccessにフルパスで指定する必要がありますよね。
QNAPだとそのフルパスが良く分からなかったんです。

なんかググると、頭に「/share/を付ければなんとかなるみたいなんですけどね。
確かにその通りだったんですよ。でもね。日本語(2バイト文字)を含む場合は、Windowsで編集したりしてもどうにもダメだったんですよ。

で、諦めて半角文字だけパスの所にパスワードファイルを纏めようか?なんてことも考えましたが、気が付いたんです。これですね。

sshでQNAPへログインします。
中身はLinuxです。
/shareの下に見覚えのあるフォルダが並んでいるかと思います。
そこから適当に該当するサイトのファイルが保存してある場所を探して、直接viで.htaccessを編集することで、正しくパスを指定することが出来ます。

それと、理由は解りませんが、/dev/nullを指定できませんでした。
これがエラーになるみたいなんですよね。なんでだろう?削って大丈夫かな?と少し不安もありますが、取り敢えずは動いてるから様子見です。

これで終わりです。

証明書の更新は・・・多分、証明書を作成したマシンでcertbot renewってやって出来上がった認証ファイルを定期的にアップロードして更新してやることで解決するでしょう!!(期待)

本気で終わり!
長かった~(^^♪