1. 保護された通信

保護された通信

はじめに

2017年10月17日に、さくらインターネットからメールが届いた。さくらのレンタルサーバ/マネージドサーバにおいて、無料SSLサーバー証明書「Let's Encrypt」が利用可能になったらしい。常時SSLの必要性は良く分からないが、ブラウザのアドレスバーに「このサイトへの通信は保護されていません」と表示されることは何とか回避したい。とにかく調べてみると、さくらインターネットの独自SSLには「IPアドレスベース」と「SNI SSL」があるらしい。さくらのレンタルサーバのスタンダードタイプでは複数のドメインを運用することが可能で、「SNI SSL」を使って、それぞれに独自SSLを追加費用なしで設定できる話になっている。デメリットは比較的新しい技術のため古いブラウザに対応していないことらしい。しかし昨今、古いブラウザはセキュリティ面で不安があり、利用者は限りなく減少していると思われる。

wwwへの思い

ところで、昔はホームページのアドレスにはwww.lexicon.jpのように「www」が付いていた。本サイトは10年以上歴史を重ねてきたことから、引き続き「www」ありで独自SSLを運用したい。不十分な知識ながら、「www.lexicon.jp」とは、「lexicon.jp」のサブドメインとして設定すべき関係にあった記憶があり、本来インターネット上ではlexicon.jpと、www.lexicon.jpとは別のアドレスとして扱われる。ゆえに両アドレスで同一サイトを表示できることになると、二つのアドレスでミラーサイトを運用することを意味する。これは検索エンジンを惑わせることになるため避けた方が良いといわれている。ところがサイトへの来訪者は、lexicon.jpとwww.lexicon.jpの両方をめざして来られるため、wwwありとwwwなしを共存させて両方のアクセスを受け入れることが望ましい。さくらインターネットではlexicon.jpをサーバに設定して、「マルチドメインとして使用する(推奨)」を選択した上で、lexicon.jpのリクエストに対しては、htaccessファイルでwww.lexicon.jpに読み直すという方法を用いることで単一サイトとして運用することができる。

sslとの共存

今回、それに加えてSSL通信を行うとなると、新たに「http://~」のリクエストに対しても、「https://~」の結果を返すように読み直す設定をhtaccessファイルに施す必要がある。そもそもさくらのレンタルサーバを利用してウェブサイトを運営する場合には、ルートディレクトリ直下に、ドメイン管理用の「フォルダ」を置いて、そこにサイトのコンテンツをアップロードする。ひとつのレンタルサーバ契約で複数ドメインを運用する場合には、ドメインごとにフォルダを分けるのが通常だが、wwwありとwwwなしの場合には、前述のとおり、サーバの設定項目として、チェックボックスの選択だけで、ありなしを共存させることができる。しかしながら、無料SSLサーバー証明書「Let's Encrypt」を使う場合には、このさくらインターネットのレンタルサーバの親切設計による、wwwありとwwwなしを併用する使い方ではなくて、lexicon.jpのサーバ設定に加えて、www.lexicon.jpもサブドメインとしてサーバに設定するように指示されている。しかしその際にも、コンテンツとなるファイル一式はlexicon.jpと共通のものなので、その保存先となるフォルダはlexicon.jpと同じ場所を指定する。

サーバー証明書とドメイン

ところで本来、SSLサーバー証明書においては、lexicon.jpの証明書と、www.lexicon.jpの証明書とは別のものとして発行される。しかし、さくらインターネットのlexicon.jpのサーバコントロールパネルから、無料証明書発行ボタンを押した場合には、wwwありとwwwなしの証明書を両方同時に申請してくれるらしい。その上で、自動的にインストールされたlexicon.jpのサーバ証明書をバックアップする。サーバコントロールパネルには、「証明書のダウンロード」というリンクと「秘密鍵のバックアップ」というボタンもあり、その両方から必要なファイルをダウンロードするのが本来的な方法だと思うのだが……。そのバックアップコピーをwww.lexicon.jp側のサーバコントロールパネルから読み込むことで、lexicon.jp側で取得したサーバー証明書をwww.lexicon.jp側でも共用できるという説明になっている。結局、ドメインをwwwありで運用する場合に、無料SSLサーバー証明書「Let's Encrypt」を使うには、3か月ごとのサーバー証明書の期限到来ごとにwww.lexicon.jp側ではサーバ証明書を手作業で読み込ませなければならない宿命だと理解した。これは相当な手間ではないだろうか。また証明書に空白期間が生まれないのだろうか。しかしながら、さくらのサポートページの注意事項には興味深い記述があり、すでにSSLを設定済みの方は本変更により、www.example.jp 側のドメイン設定ではSSL証明書の更新ができなくなります。コピー元のexample.jpのドメイン設定から証明書を更新してコピーするか、更新のタイミングでwww.example.jpのドメイン設定から新規で証明書を取得してください。とされている。とすれば、lexicon.jpとwww.lexicon.jpとでそれぞれ証明書を取得するという方法も、また妥当な対応であるということが理解できる。

中間証明書の解決

ところで、さくらインターネットで指示されている方法で、一度はwww.lexicon.jpにサーバー証明書をインストールできたものの、ブラウザで閲覧した際に不正な証明書を利用しているという趣旨の警告メッセージが表示された。あとから思えば、クッキーやキャッシュデータを削除して再表示すればよかったのかもしれないが、一旦www.lexicon.jp側にインストールした証明書を削除して、www.lexicon.jp側でもサーバコントロールパネルの無料証明書発行ボタンを押してみると無料SSLサーバー証明書「Let's Encrypt」が発行された。その結果、wwwありとwwwなしで各一枚の証明書が発行できたかのような結果となり常時SSLとして動作しているので、これで様子を見ることとする。これだと、両証明書とも自動更新してくれるのだろうか……。

これら一連の作業の途中では、サーバ証明書のバックアップを行い、設定と削除を何度かやり直した。その際、中間証明書がないというメッセージが表示されて困った。中間証明書とはある種のテキストの羅列なのだが、SSLボックスのサイトで公開されているものを張り付けることで対応できた。

htaccessの設定

そしてhtaccessファイルの作成は、さくらインターネットのサポートページで公開されている情報の組み合わせで実現できる。まずテキストファイルに「httpをhttpsに誘導する。」記述を張り付ける。一行改行して、「wwwなしをwwwありへ誘導する。」記述を張り付ける。これだけで、あとは必要な部分を自サイト用に書き換えれば動作することを確認した。その際、「RewriteEngine on」という記述は、一度宣言すれば2か所目は省略しても良いことと、さらには、wwwなしをwwwありへ誘導する記述にあるアドレスは「http://~」ではなく「https://~」と書き換えて一応の目的を達成できている。その他、特に「文字コードをUTF-8」、「BOMなし」、「改行コードをLF」、「最終行末で改行」などの注意点はその他ページを検索すれば詳しく解説されている。

まとめ

もう一度おさらいしてみると、lexicon.jp側のサーバ設定は、「マルチドメインとして使用する(推奨)」という状態でサーバ証明書を発行した。www.lexicon.jpもサブドメインとしてサーバに登録した。lexicon.jp側で発行したサーバ証明書のバックアップコピーをwww.lexicon.jpへ読み込ませた。その際、www.lexicon.jp側は「wwwを付与せずマルチドメインとして使用する(上級者向け)」を選んでいる。一度は読み込むことができたように記憶しているが、ブラウザでページを閲覧した際に不正な証明書としてエラーが表示された。そのため、www.lexicon.jp側で証明書を削除して、今度は無料証明書発行ボタンを押してみると新しい証明書が自動でインストールされた。ブラウザの表示も正しく行われている。正しい動作が得られたので、lexicon.jp側も一連の証明書発行後に「wwwを付与せずマルチドメインとして使用する(上級者向け)」に設定を変更した。これでしばらく様子を見ることにする。