読者です 読者をやめる 読者になる 読者になる

orangeProse別館

orangeProse(本ブログ)の補助

VagrantでUbuntuサーバ/Apache2のSSL(https)

Vagrant Server Ubuntu Programming

VagrantUbuntuサーバ構築練習シリーズ。

これまでにやったこと:

環境:

今日触れる項目:

SSLの設定

前回の記事では、/etc/apache2/sites-availableにあったdefaultファイルをコピーしてwwwファイルを作り、a2ensiteコマンドでwwwを有効化して/etc/apache2/sites-enableにwwwファイルへのシンボリックリンクを作り、a2dissiteコマンドで000-default(defaultファイルへのシンボリックリンクになっている)を無効化しました。

前回のwwwというサイトがenableされた状態だとして、あらためて、192.168.33.20にホストのブラウザでhttp接続してみます。

前回の設定では、ドキュメントルートが/vagrantで、ここにindex.htmlファイルがあり、これが表示されます。

今度はhttpでなくhttpsでアクセスを試みます。ブラウザが「アクセスできません」と言っていれば、前準備はOKです。

前回のUFWの設定で、'Apache Full'をALLOWにしているので、SSLのポートは通っていますが、Apache2のmod_sslモジュールが有効化されていない状態です。

ApacheSSLを使えるように、モジュールを有効化します:

$ sudo a2enmod ssl
$ sudo service apache2 reload

もういちど同じIPアドレスhttps接続を試みようとすると、ブラウザが「SSL接続エラー」と言います(Chromeで確認)。

証明書が無い状況です。ここでいったんetckeeper commitしておきます。

通常、HTTPSの提供には、CSRを生成し、これに認証局にサインしてもらって証明書としたものを設置しなければなりませんが、開発段階ではテスト用の証明書を利用します。

$ sudo make-ssl-cert generate-default-snakeoil --force-ovarwrite
$ sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/apache.pem
$ sudo service apache2 reload

ふたつめのコマンドを打ったときに、ホスト名を聞かれますが、vagrantとか適当な名前を入れます。ここでもetckeeper commitしておきます。

この時点でhttps接続しても、さっきと同じ接続エラーがでます。SSLで使うサイトが有効化されていないからです。

/sites-availableにはdefaultの他にもうひとつ、default-sslというenableされていないファイルがあります。これをコピーして使うことにします:

$ cd /etc/apache2/sites-available
$ sudo cp default-ssl ssl
$ sudo a2ensite ssl
$ sudo service apache2 reload

ふたたびブラウザでhttps接続しようとすると、今度はブラウザが「信用できません」と言いますが、「そのまま続行」をクリックすると、「It works!」と表示されます(Chromeの場合。Firefoxでは「危険性を理解したうえで接続するには」>「例外を追加」という手順になりますが、永続的に許可することになるので、Chromeで確認するのが無難でしょう。)。

もともとのdefault-sslのドキュメントルートはdefaultと同様、/var/wwwなので、/vagrantにあるindex.htmlではないファイルにアクセスしました。

httpsをhttpに変えてアクセスし直すと、/vagrantにあるindex.htmlが表示されるのを確認して下さい。

最後にetckeeper commitを忘れずに。

ちゃんとしたCSRのつくり方

Vagrantで構築するサーバは使い捨てが基本なので、認証局からの証明書は(ほとんどの場合)本番環境まで必要ありませんが、一応、メモとして、認証局に提出するCSRの生成方法も記しておきます。

【ステップ1】CSRを生成するためのキーペアを生成します。

$ sudo openssl genrsa -des3 -out /root/server.key 2048

パスフレーズの入力を2回促されます。

【ステップ2】サーバ起動時などにパスフレーズを入力しなければならないのは面倒なので、パスフレーズを解除します。

$ sudo openssl rsa -in /root/server.key -out /root/server-nopassword.key

先に入力したパスフレーズを聞かれます。

【ステップ3】キーペアを用いてCSRを生成します。

$ sudo openssl req -new -key /root/server-nopassword.key -out /root/server.csr

認証局から要求されているディスティングイッシュネーム情報を入力します。たとえばジオトラストだとはじめの6項目だけ入力するように求められます。

server.csrの内容を認証局に提出して、証明書としての公開鍵を受け取り、インストールします。

秘密鍵(server-nopassword.key)はバックアップのうえ厳重に保管します。


Apache+OpenSSL CSR 生成手順(新規) - YouTube


次回はrbenvかPHPか、どっちかの予定です。