個人/サークル/SOHOでも手軽に導入できる「ドメイン認証SSL証明書」のススメ
え、1年間無料!? ならば僕らもさくらでSSLを導入だ!(後編)
2015年08月07日 14時00分更新
九州某県でSNSを開発/運営するスタートアップ企業、タビジ社。CTOのイズミくんは、お金をかけられない勉強会用サイトに「ドメイン認証SSL証明書(ラピッドSSL)」を使うことにした。発行がスピーディだというが、さて、どのくらい早いのだろう?
(※この物語はフィクションです。さくらインターネット以外の実在する団体・人物とは一切関係ありません)
どんなタイプのSSL証明書でも作業の流れは同じだ
……翌 日……
ふわぁ~。日曜日だというのに早起きして、午前中から出社してしまったよ。今日は「ドメイン認証SSL証明書(ラピッドSSL)」の申請と、サーバーへのインストール作業をやってしまおう。
僕は先月、本業であるタビジSNS用のSSL証明書を申請し、インストールしたばかりだ。あっちは「企業認証SSL証明書」なので申請手順は少し違うのだけど、基本的な作業の流れは同じだ。
また、勉強会用サイトのサーバーOSもタビジSNSと同じUbuntu なので、CSR作成や証明書インストールのコマンド操作も同じでいいはずだ。前回の作業を思い出しながらやってみよう。
使用サービス | さくらのクラウド |
---|---|
サーバーOS | Ubuntu 14.04 LTS |
ソフトウェア | Apache 2.x+mod_ssl+OpenSSL |
サーバー名(FQDN) | school.tabiji.○○○○ |
■さくらインターネットでは、同社サービスのユーザーを対象に、ドメイン認証SSL証明書を1年間無料で提供するキャンペーンを実施している(2015年9月30日まで好評につき11月30日まで延長!)。
■CSR(署名要求)ファイルは、認証局にSSL証明書の発行を申請する際の、いわば“申請書”のようなもの。
■Ubuntu以外のサーバーOSを使う場合も、作業の基本的な流れは同じ。ただし操作は異なる。(詳しくはさくらインターネットのヘルプページを参照のこと)。
■「さくらのレンタルサーバ」や「さくらのマネージドサーバ」などのサービスでは、サーバコントロールパネルからラピッドSSLの申し込みやインストールが簡単に行えるようになっている。
LinuxのコマンドラインでCSR(申請用ファイル)を準備する
作業はサーバー秘密鍵とCSRの作成から始まる。まずは「さくらのクラウド」で立ち上がっている勉強会用サイトのサーバーに、手元のPCからSSHクライアントでログインする。
初めに管理者権限(root)でシェルを起動し、/etc/ssl/private/ディレクトリに移動する。Ubuntuの場合、このディレクトリには管理者以外アクセスできないように設定されているので、秘密鍵はここに保存するのが無難だろうな。
$ sudo su - 管理者権限でシェルを起動
[sudo] password for izumi: (パスワードを入力)
# cd /etc/ssl/private/ 秘密鍵ディレクトリに移動
次に、opensslコマンドを実行して秘密鍵を作成する。このとき、ラピッドSSLの仕様に基づいて、秘密鍵のビット長は「2048bit」にしなければならない。また最後に、秘密鍵を暗号化するためのパスフレーズ(パスワード)が求められる。
# openssl sha512 /var/log/syslog > rand.dat まず暗号鍵作成用の乱数ファイルを生成
# openssl genrsa -des3 -rand rand.dat -out ssl-school.key 2048 秘密鍵ファイルを作成
……省略……
Enter pass phrase for ssl-school.key: パスフレーズを設定
Verifying - Enter pass phrase for ssl-school.key: 確認のため同じパスフレーズを入力
■CSRを作成するためにはサーバー秘密鍵が必要。
■サーバー秘密鍵の作成後、乱数ファイル(rand.dat)は破棄して構わない(※誤って秘密鍵ファイルを削除しないよう注意すること)。
これで「ssl-school.key」という秘密鍵ファイルが出来た。次に、この秘密鍵を使ってCSRファイルを作成する。これも同じディレクトリ内で作業する。
opensslコマンドを実行して、秘密鍵のパスフレーズを入力すると、SSL証明書に記入する公開情報の入力が求められる。申請するうえでは「国名」「会社/組織の所在地(都道府県名、市町村区名)」「会社/組織名」「サーバーの名前(FQDN)」が必須だ(ほかは空欄でもよい)。
# openssl req -new -key ssl-school.key -out ssl-school.csr
Enter pass phrase for ssl-school.key: パスフレーズを入力
……省略……
Country Name (2 letter code) [AU]:JP 国名(2文字のコード)
State or Province Name (full name) [Some-State]:Kumamoto 都道府県名
Locality Name (eg, city) []:Kumamoto-shi 市町村区名
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Tabiji Co,.LTD 会社/組織名
Organizational Unit Name (eg, section) []:Technical Division 部署名
Common Name (e.g. server FQDN or YOUR name) []:school.tabiji.○○○○ 申請するサーバーの名前(FQDN)
Email Address []: (何も入力せずEnter)
……省略……
A challenge password []: (何も入力せずEnter)
An optional company name []: (何も入力せずEnter)
以上の操作で、「ssl-school.csr」というCSRファイルが出来上がった。よしよし、これで申請準備はオッケーだ。
“ラピッドSSL”と名乗るだけあって証明書の発行が早い!
CSRが準備できたので、さくらインターネットのラピッドSSLキャンペーンサイトで「お申し込みはこちら」に進み、会員IDでログインする。
ログインすると「SSLサーバ証明書お申し込み」というページが開いた。「プラン選択」にはさまざまなSSL証明書が並んでいるが、たしかにラピッドSSLの1年プランは「0円」と表示されている。ちなみに2年プラン、3年プランも、キャンペーン価格で少し割安になっているようだ。僕は1年プランを選び、次の画面に進む。
次はCSRの入力画面だ。入力フォームに、先ほど作成した「ssl-school.csr」ファイルの内容を丸ごとコピー&ペーストする。画面中央の矢印をクリックすると、CSRファイルに含まれるサーバー名(コモンネーム)や企業名などの情報が表示される。内容に間違いがないことを確認して、「この内容で申し込む」ボタンをポチッと押す。
これであとは、さくらに会員登録している僕のアドレス宛にメールが届くのを待つことにし……わっ、もうメールが届いた! さすがに“ラピッドSSL”と名乗るだけあって早いな。
――と言っても、まだSSL証明書が発行されたわけではない。届いたメールの文面にもあるように、まずは「認証ファイル」をサーバーにアップロードして、認証局からのアクセスと確認を待たなければならない。認証ファイルは、さくらインターネットの「会員メニュー」にある「契約情報」画面で「サーバ証明書」ボタンをクリックすればダウンロードできる。
PCにダウンロードされた「○○○○○○.htm」ファイルをテキストエディタで開き、Webサーバーのコンテンツディレクトリにコピー(同じファイル名、同じ内容で新規作成)した。
# cd /var/www/html/ Webサーバーのコンテンツディレクトリ(トップディレクトリ)に移動
# vi ○○○○○○.htm エディタで認証ファイルを新規作成
……ファイルに書かれている文字列をコピー&ペースト、保存……
■「認証ファイル」は、認証局側からアクセスして「証明書の発行を申請したサイトが実在していること」と「申請者=サイト管理者であること」を確認するためのもの。
■認証ファイルの発行後、認証局は申請のあったサイトを定期的にクロールして、認証ファイルがアップロードされたことを確認する。したがって、認証ファイルは外部からアクセス可能な状態でなければならない。アクセス制限をかけている場合は、一時的に解除しておくこと。
認証ファイルをサーバーに設置してトイレに行っている間に、もう次のメールが届いていた。おおっ、「SSLサーバ証明書発行のお知らせ」と書いてあるぞ。
先ほど認証ファイルをダウンロードした「契約情報」画面を再度開くと、SSL証明書がダウンロードできるようになっている。ダウンロードボタンをクリックすると「server.crt」というファイルがダウンロードされた。早い早い、申請してから30分もかからずにSSL証明書が発行されちゃったぞ!
発行お知らせメールを読むともう1つ、「中間CA証明書」も必要だと書かれている。メール文中のリンクをたどると、認証局であるジオトラスト社のサイトで、ラピッドSSL用の中間CA証明書が公開されている。後ほどの作業で必要になるので、このページを開いておこう。
■セキュリティ上の理由などから、一般的なSSLサーバー証明書は、最上位の認証局(ルートCA)から直接認証を受けるのではなく、ルートCAから認証を受けた認証局(中間CA)に認証を受けるという「階層構造」をとっている。ただし、ブラウザにはルートCAの証明書しかインストールされていないため、サーバー側でSSLサーバー証明書と一緒に中間CA証明書も提供する必要がある。
サーバーに証明書をインストールし、Apacheの設定を変更
さあて、この勢いに乗ってSSL証明書をサーバーにインストールしてしまうぞ。
Ubuntuの場合、多くのSSL証明書が/etc/ssl/certs/ディレクトリに配置されている。今回の2つの証明書もここに置けば混乱しないだろう。先ほどダウンロードしたSSL証明書、「server.crt」ファイルをPCのテキストエディタで開き、内容をコピー&ペーストしてサーバーに保存する。同じように中間CA証明書も、ジオトラスト社のページからコピー&ペーストし、保存だ。
# cd /etc/ssl/certs/ SSL証明書ディレクトリに移動
# vi ssl-school.crt SSLサーバー証明書ファイルを新規作成
…エディタが開くので、証明書の内容をコピー&ペースト…
# vi ssl-chain.crt 中間CA証明書ファイルを新規作成
…同じくコピー&ペースト…
次はApacheの設定変更だ。UbuntuでインストールされるApacheは、デフォルトの状態ではSSL(HTTPS)アクセスが有効になっていないが、設定ファイルは用意されている。これをコピーし、SSL証明書に関する設定部分を書き換えて使うことにする。
# cd /etc/apache2/sites-available/ Apacheの設定ファイルディレクトリに移動
# cp default-ssl.conf school-ssl.conf 元々用意されている設定ファイルを別名でコピー
# vi school-ssl.conf コピーした設定ファイルをエディタで開く
書き換えるのは「SSLCertificateFile」「SSLCertificateKeyFile」「SSLCertificateChainFile」の3項目だ。それぞれ、今回インストールしたSSLサーバー証明書、サーバー暗号鍵、中間CA証明書をフルパスで指定する。僕の場合は次のようになった。
…エディタで各ファイルのパスを書き換える…
SSLCertificateFile /etc/ssl/certs/ssl-school.crt
SSLCertificateKeyFile /etc/ssl/private/ssl-school.key
SSLCertificateChainFile /etc/ssl/certs/ssl-chain.crt
…書き換えたらファイルを保存する…
あとはこの設定ファイルを有効にして、Apacheを再起動すればよい。これでSSL(HTTPS)アクセスが有効になったはずだ!
# a2ensite school-ssl.conf 書き換えたApache設定ファイルを有効にする
……省略……
# service apache2 restart Apacheの再起動でSSLアクセスが有効になる
……省略……
Apache needs to decrypt your SSL Keys for school.tabiji.○○○○:443 (RSA)
Please enter passphrase: サーバー秘密鍵のパスフレーズを入力
なお、サーバー秘密鍵が暗号化されていると、上の実行例のようにApacheを起動するたびにパスフレーズを入力しなければならない。これだと、サーバー(仮想マシン)を再起動したときにApacheが自動的に起動しないので困る。また、別の問題として、サーバー秘密鍵のバックアップもしておきたい。サーバー外に保管するので、こちらのほうは暗号化された状態のほうがベターだ。
そこで、サーバー上の秘密鍵は暗号化を解除し、バックアップする秘密鍵は暗号化したままにしておくことにした。パスフレーズさえ覚えていれば、このバックアップからいつでもサーバー秘密鍵を復元できる。
# cd /etc/ssl/private サーバー秘密鍵のディレクトリに移動
# cp ssl-school.key ssl-school.key.bak 暗号化された秘密鍵のコピーを作成
# openssl rsa -in ssl-school.key -out ssl-school.key 秘密鍵の暗号化を解除する
Enter pass phrase for ssl-school.key: パスフレーズを入力
writing RSA key 暗号化を解除して秘密鍵が上書きされた
# cat ssl-school.key.orig 暗号化されたままの秘密鍵の内容を表示
…別途、テキストファイルにコピー&ペースト、保存する…
■SSL証明書には、CSR作成時に指定したサーバー秘密鍵に対応した公開鍵のデータが含まれる。したがって、秘密鍵を消したりなくしたりするとSSL証明書が使えなくなる。秘密鍵は、サーバー以外のマシン(メディア)にバックアップしておくべきだ。
HTTPSアクセスできるサイトが完成、さて勉強会のほうは?
よーし、これで勉強会用サイトにSSLアクセスできるようになっているはずだ。さっそくブラウザを開き、勉強会用サイトの「http://」を「https://」に変えてアクセスしてみる。――で・き・たー!
URLバーにはちゃんと鍵のアイコンが表示されている。オレオレ証明書(自己署名SSL証明書)とは違って、アクセスしたときにブラウザの警告画面が出ることもない。ま、当たり前なんだけど気持ちいいねえ。
* * *
……2カ月後……
コクラ「――では、次の発表者はイズミくんです」
オオムタ「よっ、待ってました! イズミCTO!」
僕「や、やめろよ! 緊張するだろ……」
今日はタビジ社主催、第1回エンジニア勉強会の日だ。勉強会用サイトが立ち上がったあと、オオムタ、コクラ、僕が人づてに声をかけまくって、集まった参加者は8名(僕ら3名を含む)。本当はもうちょっと集まってもらいたかったけど、まあ初回だし、会場の雰囲気もなごやかで悪くない。終わった後の交流会も楽しみだ。
少人数なので、今回は参加者全員が、自己紹介がてら短い発表をしていくことになっている。いよいよ次は僕の番だ。
どんなテーマで話せばいいのか、先週あたりから悩んでいたのだけど、やっと「これだ!」というテーマを思いついた。僕はスライドのタイトルページを開く。
「なぜ、オレオレ証明書ではダメなのか? ~ドメイン認証SSL証明書のススメ」
やっぱり実体験に基づいたネタを話すのがいちばんイイと思ったのだ。はてさて、参加者のみんなに興味を持ってもらえるかな。それではプレゼン、スタート!!
(提供:さくらインターネット)