清水理史の「イニシャルB」
HTTPSでデータを納品したい! StartComの無料SSLサーバー証明書をNASで使う
(2014/12/8 06:00)
世の中のWebサービスが続々とHTTPS対応となる中、他人にアクセスを強要させるファイル送信リンクで、いつまでもHTTPを使い続けるのはいかがなものか? そんなわけで、実験的な意味も含め、StartComが無料で提供しているSSLサーバー証明書を使って、原稿納品用に使っている自宅NASのファイル送信機能をHTTPS化してみた。
HTTPではファイルを転送したくない
実際にSSLサーバー証明書の取得と導入をやってみると、「Let's Encrypt(参照:http://internet.watch.impress.co.jp/docs/news/20141119_676866.html)」の取り組みへの期待は膨らむばかりだ。
それなりにコストと労力をかけられる企業のWebサイトなら話は別だが、個人で公開しているサーバーなどでは、そのコストと手間から、未経験者が「ちょっとやってみようか」などと考えると、たちまち泥沼に足を踏み入れることになる。
筆者もまさにそんな1人だ。半分趣味、半分実用で運用しているSynologyのNASが自宅にあるのだが、これをHTTPS化しようとして、かなりの時間と労力を奪われた。
このNASには、ファイル送信用のURLを生成する機能が搭載されており、NAS上に保存されたファイルを「http://soxco.synology.me:000/fbsharing/2wLxaVQTxT」のようなURLでダウンロードすることが可能になっている。
これを利用して、動画や多くの画像などをほかの人に送信することがあるのだが、ご覧の通り、そのURLは「HTTP://」となっている。
HTTPの欠点はさまざまあるが、個人的に気にしなければならないのは、ファイル送信用URLの漏えいだ。
以前、本コラムの「[HowTo]中国のグレートファイアウォールを突破する方法」の中で、OneDriveでファイル送信する際の短縮URLがHTTPであること、そして、このURLがネットワーク上で生でやり取りされることに触れた。
上記記事では、VPN Gateでの話となるため、VPNサーバーを提供するボランティアのサーバー上に記録される可能性があるという話だが、普通にOneDriveの短縮URLをメールなどでやり取りすれば、インターネット上で生でURLが流れることになる。
もちろん、これがイコール、情報漏えいなどにつながるわけではないが、URLを送信/受信したユーザーがたまたま海外の無料のVPNサービスなどを利用していたとか、宿泊先や出張先で提供されていたプロキシサーバーを経由してアクセスしていたとか、よくわからないが暗号化なしの公衆無線LANサービスを使っていた、などといった場合、そのVPNサーバーやキャプチャされたパケットに、プロキシサーバーにビジネスで使う重要なファイルにアクセス可能な情報が記録される可能性は否定できない。
自分でリスクを認識していれば、確実に安全な環境以外ではHTTPリンクは踏まない、という対処もできるが、NASのファイル送信機能などを利用した場合、相手がどのような環境でURLにアクセスするかは想定できない。要するに、相手にアクセスを強要するファイル送信にHTTPを使うのはどうか? というわけだ。
StartComの無料SSLサーバー証明書を利用
というわけで、自宅のファイル送信環境を早速HTTPS化することにした。
実は、前述したSynologyのNASでは、標準でHTTPSによるファイル送信機能が搭載されているのだが、この機能では、「http://gofile.me/220Oe/xE3XeYO」のようにインターネット上の中間サーバーを経由して、NAS上のファイルにアクセスするしくみとなっており、HTTPSでの通信で転送速度が低下する仕様となっている。
また、いわゆる“オレオレ証明書”を利用することも可能だが、自宅や自社内のユーザーのみで利用するならまだしも、ファイル送信の場合、外部の取引先などにファイルを渡す場合もあり、さすがに「“オレオレ証明書”を受け入れてくれ」と言うわけにはいかない。
このため、今回は、独自ドメイン、およびきちんとした証明書を利用し、直接、NASからHTTPSでファイル送信できるように設定する。
前提条件は、以下の3点となる。
・Synology製NASを利用している
・独自ドメインを取得している
・メール送受信が可能
今回はSynologyの製品での解説とするが、QNAPなど、他社製のNASにもSSLサーバー証明書をインポートする機能が搭載されているので、若干の操作は異なるものの対応は可能だと考えられる。独自ドメインはDNS設定が可能ならどこでもかまわないが、今回はさくらインターネットでの手順を解説する。メールの送受信は、SSLサーバー証明書を取得する際に利用する。
利用するSSLサーバー証明書は、StartComが発行する無料のClass 1 SSLサーバー証明書とした。SSLサーバー証明書は、大手の発行元のもので年間数万円前後、最近では年間2000円前後の低価格なサービスも登場しているが、StartComのサービスでは、個人で利用する場合は無料となる。
また、オンラインショップなどで利用するSSLサーバー証明書の場合、サイトと申請者の同一性を確認するために、出頭や公的文書などが必要とされるが、StartComのClass 1 SSLサーバー証明書では、申請するドメインのメールアドレスを利用したメールでの認証のみで発行される。
このため、サイトの同一性を担保するには十分とは言えないが、今回の用途のように、個人が公開しているサーバーやNASなどでの利用には十分と言えるだろう。
また、StartComのサービスはすべて英語となっているうえ、サインアップ後のログインに証明書を利用する方式となっており、少々、わかりにくいサービスとなっている。以下、なるべく手順を追って解説するが、ある程度の覚悟は必要だ。
NASにSSLサーバー証明書を設定する
それでは、実際に設定していこう。手順としては、全部で6ステップになる。
1. NASの事前準備
2. ルーターの設定
3. 独自ドメインのDNS設定
4. StartComのSSLサーバー証明書取得
5. SSLサーバー証明書のNASへの適用
6. 自動生成ファイル共有リンクのHTTPS化
手順を丁寧に解説しようとすると、どうしても特定機種、特定サービスの手順が登場してしまう。このあたりは、自分の環境に合わせて読み替えてほしい。
ステップ1:NASの事前準備
まずは、NAS側の設定をする。SynologyのNASの場合、標準ではHTTPS接続が無効になっているため、設定画面からHTTPSを有効化しておく。
続いて、外部アクセスを有効にする。HTTP、HTTPSのどちらを使うかに限らず、URLを生成してファイル送信できるようにするには、外部アクセスの有効化が必要となる。
今回の記事では、いくつかのドメイン名が登場するが、仮名ではわかりにくいため、記事上でも筆者がテスト用に取得した実名を利用する。ここでは、「soxco.synology.me」という名前でDynamic DNSを設定した。
なお、実際にHTTPSでファイルを転送する際は、NASのURLがSSLサーバー証明書の独自ドメインとなる必要がある。このため、ここで設定したDynamic DNSを後で独自ドメインのDNS設定でCNAMEのエントリで設定する(ステップ3)。
ステップ2:ルーターの設定
続いてルーター側で外部アクセスを可能にする。SynologyのNASの場合、HTTPSの接続にはポート5001を利用する。このため、ルーターのポートフォワードやバーチャルサーバー機能を利用し、ポート5001をNASのIPアドレスに転送し、外部からアクセス可能にしておく。
設定後、スマートフォンなど、外部アクセス可能な端末からアクセスできるかどうかを確認しておくといいだろう。今回は、前述したように、Dynamic DNSの名前が「soxco.synology.me」なので、「https://soxco.synology.me:5001」でアクセスできる。
もちろん、この段階ではサーバー証明書は適用されていないので、アクセスの警告が表示される。自分だけが使うなら、“オレオレ証明書”でもかまわないが、さすがに第三者に受け入れさせるわけにはいかない。
ステップ3:独自ドメインのDNS設定
ここまでで、外部からNASにアクセスできる環境が整ったが、ドメイン名がDynamic DNSのままでは、SSLサーバー証明書は発行できない。このため、このDynamic DNSに、独自ドメインを割り当てる。
具体的には、契約しているDNSサービスの設定画面にアクセスし、「CNAME」のエントリを追加する。設定できたら、スマートフォンなどから「https://ft.soxco.jp:5001」でアクセスできるかを確認する(もちろんまだ警告が表示される)。
ステップ4:StartComのSSLサーバー証明書取得
ここまで準備できたら、いよいよSSLサーバー証明書を発行する。この手順は長いので、さらに4つのステップに分けて解説する。
・4-1 サインアップ
まずは、「https://www.startssl.com」にアクセスし、StartComにサインアップする。
サインアップ時には、名前、住所、電話番号などを入力するが、証明書発行時に、この住所が審査対象となるので、正確に入力することをおすすめする。
サインアップが完了すると、メールでレジストレーションコードが送られてくるので、これを入力する。しばらく時間がかかるので、根気よく待つ必要がある。
最初のレジストレーションコードを入力すると、先方でサインアップを承認するかどうかが検討される。おそらく、住所やメールアドレスなどが実在するかを確認しているようで、筆者はなかったが、場合によっては先方の担当者からメールでいくつかの質問が届く場合もあるようだ。
無事に承認されると、再びレジストレーションコードがメールで送られてくるので、メールに記載されているURLにアクセスして、コードを入力する。
2回目のレジストレーションコードを入力すると、Webアクセス用の秘密鍵の生成手順になる。StartComでは、ユーザー認証に、一般的なユーザーIDとパスワードではなく、クライアント証明書を利用する方式となっている。このため、秘密鍵を生成し、その秘密鍵を元にクライアント証明書を作成し、これをブラウザにインストールする(次回以降、ログイン時に証明書の選択画面が表示される)。
これでStartComのサービスを利用可能になるが、ここで1つ実行しておいてほしいのがクライアント証明書のバックアップだ。クライアント証明書は、簡単には再発行できないため、OSを更新したりPCを入れ替えたりした際に、証明書がなくなると、英語でサポートとやり取りすることになる。
インターネットオプションから証明書の一覧を表示し、StartComの証明書を必ずバックアップしておこう。
・4-2 ドメイン名の実在性確認
StartComのサービスが利用可能になったら、最初に取得する証明書で利用予定のドメイン名の実在性確認を実行する。
前述したように、StartComのClass 1証明書では、この実在性確認に書類審査などは必要なく、メールベースで可能となっている。具体的には、postmaster@ドメイン、hostmaster@ドメイン、webmaster@ドメインなどのメールアドレスにメールが送信されたコードを入力するという方式になる。
これらのメールアドレスが使えれば、ドメインの所有者であることが確認できるという簡易的な認証だ。あらかじめメールを受信できるようにしてから、確認作業を実行しよう。
・4-3 サーバー証明書の発行
ドメインの所有者であることが確認されると、いよいよサーバー証明書を発行可能となる。「Certificates Wizard」を実行しよう。
発行する証明書の種類で「Web Server SSL/TLS Certificate」を選択後、10文字以上のパスワードを入力して秘密鍵を生成する。暗号化のキーサイズやアルゴリズムは標準設定のままでかまわない。
生成された秘密鍵は、後でNASに適用する必要があるので、テキストボックスの文字を全選択し、Notepad(プレーンテキストで保存する必要がある)などに張り付けて「ssl.key」として保存しておく。これも無くすと、簡単には再発行できないので、必ずバックアップしておくことをおすすめする。
続いて、SSLサーバー証明書を生成するドメイン名を選択する。Validation Wizardで検証されたドメインが表示されるので選択し、サブドメインを指定する。
StartComのサービスでは、有料のClass 2を利用すれば、ドメインのワイルドカードで利用できるSSLサーバー証明書を発行できるが、無料のClass 1では、ドメイン自体と特定のサブドメインのみで利用できる証明書となる。
このため、ステップ3で独自ドメインのDNSで設定したサブドメイン(ここでは「ft.soxco.jp」)を指定する。
これで、秘密鍵と同様にSSLサーバー証明書の文字列がテキストボックスに表示されるので、Notepadにコピーして「ssl.crt」で保存しておく。
・4-4 秘密鍵の復号
これで、NASへの設定に必要な秘密鍵とサーバー証明書が作成されたが、SynologyのNASでは(QNAPも)、暗号化された秘密鍵をそのまま適用することができない。このため、復号化した状態のファイルを生成する必要がある。
StartComの「Tool Box」から「Decrypt Private key」を選択し、ssl.keyにコピーした文字列と生成時に指定したパスワードを入力する。これで、復号された秘密鍵ができあがるので、「private.key」などとして保存しておく。
なお、秘密鍵は絶対に外部に漏れないように厳重に管理する必要がある。特に復号化したprivate.keyの文字列は、パスワードで保護されていないため、丸裸の状態だ。できれば、NASに適用後、すぐにでも削除しておくべきだろう(ssl.keyは削除しないように注意)。
ステップ5:SSLサーバー証明書のNASへの適用
ファイル一式が整ったら、いよいよNASに適用する。SynologyのNASの場合であれば、「コントロールパネル」の「セキュリティ」にある「証明書」からインポート可能だ。
秘密キーに「private.key」、証明書に「ssl.crt」を指定し、「OK」をクリックすれば証明書がインポートされる。なお、暗号化されたままの秘密キーはインポートできないため、「ssl.key」を指定した場合はエラーになるので注意しよう。
この状態で、「https://ft.soxco.jp:5001」のように、証明書を取得したサブドメインを指定してアクセスすれば、ブラウザでの警告なしにHTTPSでアクセスできるようになる。
ステップ6:自動生成ファイル共有リンクのHTTPS化
基本的な設定は、上記ステップ5までで完了となるが、冒頭で触れたように、筆者は単にNASに外部からHTTPSでアクセスしたいのではなく、ファイル送信機能で三者にファイルを送信する際にHTTPSアクセスを利用したいため、自動生成URLがHTTPSの独自ドメインになるようにNASの設定を変更する必要がある。このため、Synology以外のNASを利用している場合は、このステップは飛ばしてほしい。
SynologyのNASでは、標準で生成されるファイル送信用のURLは、前述したように「http://gofile.me/220Oe/xE3XeYO」となる。まずは、これを「gofile.me」経由ではなく直接転送に変更する。
コントロールパネルの「Quick Connect」を開き、「Quick Connectを有効にする」にチェックを付け、いったん、機能を有効化。「詳細設定」ボタンをクリックして、「ファイルの共有」のチェックを“外す”。
これで、ファイル送信用のURLを自動生成する際に、Quick Connectの「gofile.me」を経由しなくなるが、残念ながらURLは「http://soxco.synology.me:5000/fbsharing/2wLxaVQTxT」のようなDynamic DNS名となる。
このままでは、せっかく取得した証明書を利用できないため、Dynamic DNS名を独自ドメインに変更する。「外部アクセス」の「詳細」で、ホスト名に証明書を取得したサブドメイン名を指定する。
これで全設定が完了だ。SynologyのNASでは、設定画面にアクセスしたときのプロトコルでファイル送信用のURLを自動生成する。このため、ファイル共有用のURLを生成する際に、自らHTTPSでファイルマネージャなどにアクセスすれば、「https://ft.soxco.jp:5001/fbsharing/c4tvY2EJ」のように、HTTPSで、しかもブラウザでの警告なしに、第三者にファイルを送信できるURLが生成できることになる。
正直、疲れた……
以上、筆者宅のSynologyのNASで、ファイル送信用のURLをHTTPS化する手順を紹介した。SynologyのNASを使ってファイル送信している人向けの情報が多く恐縮だが、StartComの部分は、汎用的に使える情報なので、参考にしていただけると思う。
正直、達成感はあるものの、実際には、それなりに試行錯誤を繰り返しており、かなりの労力と時間を消費し、疲れてしまった。
冒頭に戻るが、もう、こんな苦労はしたくないので、早く「Let's Encrypt」の取り組みが実現することを切に願うところだ。
もちろん、素直にクラウドサービスでファイルを送信した方が効率がいいが、扱うデータによっては、クラウドに上げられないようなものもある。そういった点を考慮すると、NASでしかも、セキュアにファイルを転送できるようにするメリットはあるだろう。