オレオレ自己証明書を発行して、MAMP4でHTTPS環境を構築してみよう

今更ですがGoogleさんが推奨している常時SSL化の波に飲み込まれ、僕も開発環境をSSL化しておいた方がいいのでわ!!? という漠然とした危機感が沸いてきたので、付き合いが長いMAMP無償版をOpenSSLでhttps接続できるようにしてみました。

備忘録も兼ねて今回設定した構築手順を照会したいと思いますが、OpenSSLのコマンドが難解な呪文でしかないので、詳しい方は不足している点など指摘頂けると助かります。(汗

対象者と実行環境

対象者

この記事は、Web製作にMAMPを使用している初級者の方をイメージして書きました。基本、Terminalでの作業になります。

実行環境

    • MAMP – v4.4.1 (3114)
    • macOS Sierra – v10.12.4
      Apache – v2.2.34(unix)
      MySQL – v5.6.38
      PHP – v7.0.17
    • OpenSSL – v1.0.2

    因みに、pro版(有料版)のMAMPだとGUIでSSL化できるそうですね。Pro版は使ってないので試してませんが…。

    目次

    1. DocumentRoot(ホストディレクトリ)の作成
      自己証明書(オレオレ証明書)の作成
    1. ホストディレクトリ(DocumentRoot)の作成

      MAMPのデェフォルトのドキュメントルートは、「/Applications/MAMP/htdocs/」になっていますが、今回はヴァーチャルホストに設定するので、任意の場所に新規でディレクトリを作成し、そこへページの表示確認用に簡単なindex.phpを配置しておきます。

      以下、Terminal.appで進めていきます。


      */ cd でホームディレクトリへ移動/*
      $ cd ~

      */ ホームディレクトリ直下に、「website.local」ディレクトリを作成。
      $ sudo mkdir website.local
      */ 作成した、「website.local」ディレクトリへ移動。
      $ cd ./website.local
      */ 確認用に簡単なphpファイルを作成
      $ sudo touch ./index.php

      作成した、確認用のindex.phpファイルは空なので、中身は簡単に以下のようにしておきます。


      <!DOCTYPE html>

      <html>
      <head>
      <title>MAMP|SSL TEST</title>
      </head>
      <body>
      <p><?php echo "This is MAMP SSL TESTPAGE"; ?></p>
      </body>
      </html>

      最終的に、ブラウザで[https://website.local/]にアクセスすると、ここで作成したindex.phpの「This is MAMP SSL TESTPAGE」が上手く表示されれば成功!! ということですね。

      自己証明書(オレオレ証明書)の作成

      あらかじめ以下の場所にSSL自己証明書のファイルを置くためのフォルダを作っておく。今回はフォルダ名をsslkeysとします。
      自己証明書は、下記ディレクトリに作成していきたいと思います。

      • /Applications/MAMP/conf/apache/sslkeys/

    2. */ apacheディレクトリへ移動 /*
      $ cd /Applications/MAMP/conf/apache/
      */ 「sslkeys」ディレクトリを作成したらカレントディレクトリにしておきます。 */
      $ mkdir ./sslkeys
      $ cd ./sslkeys

      秘密鍵の作成

      まずは秘密鍵を作ります。作成したsslkeysディレクトリの中で下のコマンドを打ちます。

      */ 「localserver-private.key」という名前で、2048ビット秘密鍵を作成 /*
      openssl genrsa -des3 -out localserver-private.key 2048

      • genrsa コマンド:RSA形式で秘密鍵を作成。
        -des3 オプション:des3アルゴリズムで作成した秘密鍵を暗号化、パスフレーズで保護。
        -out オプション:生成した秘密鍵の出力。
    3. すると、以下の様にパスフレーズの入力を求められるので、同じパスワードを2回入力します。


      Enter pass phrase:
      Verifying - Enter pass phrase:

      CSR(証明書署名要求)ファイルを作成

      先程作成した、「localserver-private.key」をもとに、以下のコマンドを打ち込みCSR(証明書署名要求)ファイルを作成します。


      $ openssl req -new -key localserver-private.key -out localserver.csr

      • req コマンド:csr(証明書署名要求)を作成
        -new オプション:csr(証明書署名要求)ファイルを新規作成
        -key オプション:入力する秘密鍵ファイルを指定。
        -put オプション:出力するCSR(証明書要求)ファイル名

    4. */ 秘密鍵のパスワードが要求される /*
      Enter pass phrase for localserver-private.key:

      パスワードを求められるので、「localserver-private.key」を作成した時に入力したパスワードを入力します。

      パスワード入力を正しく受け入れてもらえたら、順番に情報を書き込む様に対話形式で要求がでてきますが、今回はあくまでローカル開発環境でのみ使用で、正式な認証局に署名をしてもらうわけじゃないので、Common Name以外は、Return連打で進んでしまって大丈夫なようです。

      Common Nameのとこだけ、1番最初に作成したホストディレクトリ「website.local」を入力しておきます。


      -----
      Country Name (2 letter code) [AU]:
      State or Province Name (full name) [Some-State]:
      Locality Name (eg, city) []:
      Organization Name (eg, company) [Internet Widgits Pty Ltd]:
      Organizational Unit Name (eg, section) []:
      Common Name (e.g. server FQDN or YOUR name) []:website.local
      Email Address []:

      Please enter the following 'extra' attributes
      to be sent with your certificate request
      A challenge password []:
      An optional company name []:

      これで、CSR(証明書要求)ファイルが作成され、lsコマンドで確認すると、現時点で「/Applications/MAMP/conf/apache/sslkeys/」は、下のようになっているはずです。


      $ ls -l .
      -rw-r--r-- 1 root admin 968 3 23 00:42 localserver.csr
      -rw-r--r-- 1 root admin 1743 3 23 00:19 localserver_private.key

      CRT(SSLサーバー証明書)の作成

      csrファイルが作成できたら、このcsrファイルに署名をして、crt(SSL証明書)ファイルを作ります。本来であれば、このcsrファイルをCA(認証局)へ送って署名をもらうらようなのですが、今回はあくまで、ローカル開発環境での使用を目的とした「オレオレ自己証明書」なので、自分自身で署名することになります。

      crt(SSL証明書)ファイル作成には、下記コマンドを打ち込みます。


      $ sudo openssl x509 -in localserver.csr -days 365 -req -signkey localserver_private.key -out localserver.crt

      • x509 コマンド:公開鍵証明書を操作
        -in オプション:証明書を読み込むための入力ファイル名を指定
        -days オプション:証明書の有効期間を指定(365日)
        -req オプション:証明書要求を代行
        -signkey オプション:入力ファイルの自己署名に利用する秘密鍵を指定
        -out オプション:出力するCRT(SSLサーバー証明書)ファイル
    5. すると、またまたパスワードを求めてきますので同じように入力します。


      Password:
      Signature ok
      subject=/C=AU/ST=Some-State/O=SSLTEST inc/CN=mampssltest
      Getting Private key
      Enter pass phrase for localserver_private.key:

      これでようやくCRT(SSL証明書)が発行されました。

      念のため、この時点で「/Applications/MAMP/conf/apache/sslkeys/」を確認すると以下のようになっているはずです。

      初めての方だとここまでくるのも凄く大変な気もしますが…。頑張りましょう!

      MAMP側の設定

      オレオレ自己証明書が無事発行できたので、引き続きMAMP側のApacheサーバーを設定していきたいと思います。

      1. httpd.confの設定変更

      Apacheのhttpd.conf(設定ファイル)の2ヶ所を変更して、必要なモジュールを読み込みます。

      httpd.conf(設定ファイル)は、「/Applications/MAMP/conf/apache/httpd.conf」にあります。

      1. ヴァーチャルホストの設定ファイル(httpd-vhosts.conf)を読み込むため、「#Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf」の頭の#を削除しコメントインします。


      /* 変更前 */
      456 # Virtual hosts
      457 #Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf



      /* 変更後 */
      456 # Virtual hosts
      457 Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf

        SSL/TSLの設定ファイル(httpd-ssl.conf)を読み込むため、「#Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf」の頭の#を削除しコメントインします。


      /* 変更前 */
      468 #Secure (SSL/TLS) connections
      469 #Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf



      /* 変更後 */
      468 #Secure (SSL/TLS) connections
      469 Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf

    6. ※行番号は、今回の実行環境のものなので、MAMPのヴァージョンによって変わってくると思います。

        httpd-ssl.confの設定
        httpd-vhosts.confの設定

      シェアする

      • このエントリーをはてなブックマークに追加

      フォローする