MAMPでMacのローカル環境にSSL(https://localhost)を設定する方法

Advertisement

Macのローカル環境でSSL(https://localhost)を使えるようにするための設定方法をまとめました。手順が複雑で忘れてしまいそうなんで(「NHKなんで…」的に)。

現在の僕の環境(macOS Catalina 10.15.5 / MAMP 5.5)では、以下の設定で問題ないですがMAMP 5.7では問題が発生するようです。5.5を使っていてアップデートを検討されているようでしたら、解決策がわかるまで待ったほうが良いかもしれません。ご注意ください!

サーバ証明書と鍵を作る

以下の手順でサーバ証明書を設定します。以下の作業はすべてコマンドラインで行います。opensslというツールが必要になるのでHomebrewなどでインストールする必要があります。

最終的には以下の2つのフィルを作成するために一連の作業を行います。

  • server.crt(サーバ証明書)
  • server.key(サーバ秘密鍵)

以下、すべて/Applications/MAMP/conf/apache/内にkeysというディレクトリを作って作業をします。まずはディレクトリを作って、そのディレクトリに移動しましょう。

$ cd /Applications/MAMP/conf/apache/keys/

1. ローカル認証局の秘密鍵を作る

$ openssl genrsa -des3 -out local-ca.key 2048

パスフレーズを聞かれるので、入力してメモっておきます。あとで使います。

2. ローカル認証局の証明書を作る

$ openssl req -x509 -new -nodes -key local-ca.key -sha256 -days 1825 -out local-ca.pem

先ほどメモったパスフレーズを入力すると、いろいろ質問されるので「Common Name」のところだけ「localhost」と入力して、残りはEnterを入力します。

Enter pass phrase for local-ca.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []:
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) []:
Organizational Unit Name (eg, section) []:
Common Name (eg, fully qualified host name) []:localhost
Email Address []:

これでlocal-ca.pemという(オレオレ)ローカル認証局の証明書ができました。

3. サーバの秘密鍵を作る

$ openssl genrsa -out server.key 2048

4. 証明書署名要求(CSR)を作る

$ openssl req -new -key server.key -out server.csr

5. Extension Fileを作る

以下の内容でv3.extというファイルを作成します。次のステップで使います。

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost

6. サーバ証明書を作る

$ openssl x509 -req -in server.csr -CA local-ca.pem -CAkey local-ca.key -CAcreateserial -out server.crt -days 1825 -sha256 -extfile v3.ext

これでApacheの設定に必要な2つのファイル作成が完了しました。

  • server.crt
  • server.key

キーチェーンに証明書を追加する

ChromeとSafariで下のキャプチャのようなセキュリティの警告が表示されるのを防ぐために、キーチェーンに証明書を追加します。Firefoxはこの設定をしても警告ページが出てきます。Chromeは73.0.3683.86、Safariは12.1 (14607.1.40.1.4)、Firefoxは66.0.2で確認しました(いずれもmacOS Mojave 10.14.4)。

Chromeのセキュリティの警告ページ

local-ca.pemをキーチェーンに追加する

先ほど作ったlocal-ca.pemというファイルをキーチェーンに追加します。キーチェーンアクセスを開いてサイドバーの「システム」にファイルをドロップします。パスワードを入力すると、以下のように「localhost」の証明書が追加されます。

キーチェーンに証明書を追加した画面

証明書をダブルクリックするとウィンドウが出てくるので、「信頼」を開いて「この証明書を使用するとき:」のドロップダウンから「常に信頼」を選びます。

キーチェーンに追加した証明書の信頼設定の変更画面

これで設定は完了です。

MAMPとApacheを設定する

はじめに注意!もしもの時のために、以下で変更する設定ファイルはバックアップを取っておきましょう。ちなみに、ここで使っているのはMAMP 5.3です。

MAMPでApacheのポートを80にする

MAMPの「Preferences」の「Ports」で「Apache Port」を80にします。

httpd.confの編集

MAMPのApacheの初期設定ではSSLの設定ファイルの読み込みがコメントアウトされています。httpd.conf(Apacheの設定ファイル)で、以下のように「#」を取ってコメントを外します。

# Secure (SSL/TLS) connections
Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf

httpd-ssl.confの編集

「SSL Virtual Host Context」のセクションの以下の4つを変更すれば設定完了です。

httpd-ssl.confで設定する項目
項目 設定
DocumentRoot サイトのルートディレクトリ
ServerName localhostに設定
SSLCertificateFile さっき作ったserver.crtファイルを指定
SSLCertificateKeyFile さっき作ったserver.keyファイルを指定

僕のローカル環境では以下のように設定されています。

##
## SSL Virtual Host Context
##

<VirtualHost _default_:443>

#   General setup for the virtual host
DocumentRoot "/Users/rriver/Sites/parashuto.com/site"
ServerName localhost
ServerAdmin you@example.com
ErrorLog "/Applications/MAMP/Library/logs/error_log"
TransferLog "/Applications/MAMP/Library/logs/access_log"

#   SSL Engine Switch:
#   Enable/Disable SSL for this virtual host.
SSLEngine on

#   SSL Cipher Suite:
#   List the ciphers that the client is permitted to negotiate.
#   See the mod_ssl documentation for a complete list.
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

#   Server Certificate:
#   Point SSLCertificateFile at a PEM encoded certificate.  If
#   the certificate is encrypted, then you will be prompted for a
#   pass phrase.  Note that a kill -HUP will prompt again.  Keep
#   in mind that if you have both an RSA and a DSA certificate you
#   can configure both in parallel (to also allow the use of DSA
#   ciphers, etc.)
SSLCertificateFile "/Applications/MAMP/conf/apache/keys/server.crt"
#SSLCertificateFile "/Applications/MAMP/conf/apache/server-dsa.crt"

#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile "/Applications/MAMP/conf/apache/keys/server.key"
#SSLCertificateKeyFile "/Applications/MAMP/conf/apache/server-dsa.key"

これで全ての設定完了です!

参考にさせてもらったサイト

以下のサイトを参考にさせていただきました。ありがとうございました!

About the author

Rriverのステッカーが貼られたMacBookの向こうにいる自分のMemojiの似顔絵

「明日のウェブ制作に役立つアイディア」をテーマにこのブログを書いています。アメリカの大学を卒業後、ボストン近郊のウェブ制作会社に勤務。帰国後、東京のウェブ制作会社に勤務した後、ウェブ担当者として日英バイリンガルのサイト運営に携わる。詳しくはこちら

ウェブ制作・ディレクション、ビデオを含むコンテンツ制作のお手伝い、執筆・翻訳のご依頼など、お気軽にご相談ください。いずれも日本語と英語で対応可能です。まずは、Twitter @rriver またはFacebook まで。

“MAMPでMacのローカル環境にSSL(https://localhost)を設定する方法” への19件のフィードバック

  1. かぷりたん より:

    初めまして。
    あちこちのサイトやブログを参考にMAMPのSSL化をやってるんですけど、
    macOS Catalinaの最新版でMAMP5.7でだと、この方法はダメでした。
    正確には「この方法でもダメでした」かな。
    MAMPを起動してパスの入力をしてApacheを起動させようとすると、

    Apache couldn’t be started. Please check your MAMP installation and configuration.

    ってエラーが出て。
    色々と調べてみたけど全然解らなくてお手上げ状態です^^;

    • ryo より:

      はじめまして。
      僕も設定したときはなかなかうまくいかずに大変でした。
      手順が複雑で、どこでうまくいっていないのかわかりづらいんですよね。
      記事の内容が役に立たなかったようで申し訳ないです。

      ちなみに、この設定でmacOS Catalina / MAMP 5.5でも動いているので、OSとMAMPのバージョンは関係ないと思っています。もちろん、100%とは言えないですが。。。

    • ryo より:

      MAMP 5.7のリリースノートを見たら「mod_ssl is now statically compiled into Apache and is always enabled and can not be disabled.」とあって、SSL関連のApacheモジュールに変更があったみたいです(内容からして設定には関係ないと思うんですけど…)。

      MAMPを5.7にアップデートしたら確認してみますね。

      • かぷりたん より:

        いえいえ、役に立ってない事はないです。
        これまで参考にしてたブログでだと古いOSでだとイケたけど、証明書がキーチェーンで読み込めないエラーで出ちゃってたんで。
        どっちにしても自分の環境では

        # Secure (SSL/TLS) connections
        #Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf

        の部分で#を外して有効化しようとするとエラーが出るみたいなんですよ。
        OSのマイナーアップデート前のCatalinaでだと問題なく動作したんですよね。
        リリースノート以外に他に情報もなくて、手詰まりでした^^;

  2. na より:

    はじめまして。
    本記事を100%参考に、SSL環境を構築できて感謝している者です。
    環境:MacOS Mojave, MAMP 5.7

    内容がわかりやすく、問題なくできました。

    今回、Catalinaにアップしようと考えていますが、SSLやWordpressが動かなくなるという一部の記事を見て躊躇しています。

    ryoさん、その後 MAMP5.7にされても問題なかったでしょうか?
    ひとつの参考として教えていただけたらと思います。

    • ryo より:

      はじめまして。
      情報が役に立ったようでなによりです。

      実はまだMAMP 5.5を使っていて、5.7で問題なく動くか確認できていません。
      以前にコメントいただいた、かぷりたんさんの環境だとCatalina + MAMP 5.7で動かなくなってしまったとのことなので、設定になんらかの変更が必要なのかもしれません。

      ちなみに、現在問題なく動いている僕の環境は以下の通りです:
      macOS Catalina 10.15.5
      MAMP 5.5 (383)

      お役に立てずにすみません。。。
      MAMP 5.7についてなにか判明したら追記しますね。

      • na より:

        ありがとうございます。
        MAMP5.5が手元にないのですが、チャレンジしてみようと思っています。

        • ryo より:

          かぷりたんさんの環境では、Catalinaのマイナーアップデート後に動かなくなったとのことなので、5.7では問題がある、またはなんらかの設定変更がある可能性が高いです。

          MAMPでSSLが使えなくなった… 追記あり

          お気をつけ下さい!

          • na より:

            報告です。環境を更新して試しました。
            Catalina 10.15.5
            MAMP 5.7(OSアップの後、再インストール)

            MAMPを再インストールする前、おそるおそる起動したところ、
            「You don’t have permission to access / on this server.」
            が出現しました。

            そこで、MAMPを再インストールし、MAMP配下にある「htdocs」にWEBソースを展開すると動きました。
            私は、WEB環境を外付けHDにおいており、どうもそれが原因のようです。

            ────────────────────────────
                  localhost:8888  localhost  SSL接続
            ────────────────────────────
            /User/配下   ○        ○     ○
            外付けHD    ○ ×     ×
            (/Volume/〜)
            ────────────────────────────

            SSL認証事態はそのままでまったく問題ないようです!

            上記よりDocument Rootが外にある場合のアクセスが原因と思われますが、「だったらどうすればいいか」は私には理解を超えて策がありません。とりあえず、User配下の運用でしのごうと思います。

            この情報が今後お役にたつようなら、、、と思います。

            そしてもし、これで何か閃かれるようでしたらご教授ください。

            (何度もコメントして失礼しました。)

          • ryo より:

            わざわざご報告ありがとうございました!
            Catalinaへのアップデート後に問題なかった(または解決できた)ようで安心しました。

            僕のほうでも新たにわかったことがあったら追記していこうと思います。

  3. かぷりたん より:

    その節はお世話になりました。
    MAMP6が出た関係で、また設定してみようと思って訪ねてきたんですけど、5.7、自分の環境では相変わらずダメでした。
    OSっていうか機種で、デフォルトのOSがMojaveで、MojaveからCatalinaにアップデートをする場合でだと問題ないけど、CatalinaがデフォルトのOSのモデルの機種だとダメなのかも?
    自分のiMac、2019年のCatalinaがデフォルトのOSの機種なんですけど、ryoさん、naさんの環境と決定的に違うなって思ったのがそこだったので、もしかしたらありえない話ではないと思います。
    あとMAMPの公式だったで、端的に訳すと「取り合えず動くっていう動作確認だけでリリースした」みたいな文章を見かけたので、その関係もあるかも?

    そうそう、Twitterでですけど、MAMP6(確かPro版)はアップデート時にクラッシュしてアップデートが出来ないとかって、外人さんが。
    2020/10/16にリリースされた6.0.1で改善されたのかまでは解りませんけど、一応と思ったので報告しますね。

    追伸、ブログの記事をリンクしてくれたんですね。
    確かその記事のコメ欄にですけど、他所様が対応策を記述してたんで、もし需要があればですけど、その方の対応策を追記しておくと良いかもです。
    自分は正直全然詳しくないので、意味が解らなくて出来なかった(笑)。

    • かぷりたん より:

      追記

      やっぱり

      Apache couldn’t be started. Please check your MAMP installation and configuration.

      って出て接続が出来なくて、エラーログを見てみたら、

      AH00094: Command line: ‘/Applications/MAMP/Library/bin/httpd’

      っていうのが出てました。
      色々と調べてみたけど有益な情報がなくて、MAMP再起動してみたりとか設定ファイルの見直しとか色々とやってみましたけど、でも変わらずダメでお手上げです^^;

      • かぷりたん より:

        さらに追記

        /Applications/MAMP/Library/bin/apachectl configtest

        で調べてみたんですけど、

        SSLCertificateFile: file ‘/Applications/MAMP/conf/apache/keys/server.crt’ does not exist or is empty

        って出て、server.crtのパーミッションとか調べてみたんですけど、でも問題なかったんですよね。
        ふと、server.crtの容量を見てみると、何故か0バイトになってて、「なんで空なんだ?」って思ったので、server.crtを作り直したらイケました。
        server.crtが空になった原因は解りませんけど、作り直しでイケたんで、ご報告しておきますね。

        • ryo より:

          コメントありがとうございます。
          情報を追えてなくて返信できてなくてすみません。実は、更新の必要性を感じなくて、僕はまだ5.5のまま使ってます。

          それはさておき、解決したようでなによりです!
          apachectl configtestのコマンドが鍵ですね〜。

          ちなみに、お使いになったのは5.7でしょうか?それとも最新の6.xですか?

          • かぷりたん より:

            今は先日、リリースされた6.0.1です。
            自分が6にしたのは5.7でSSL接続がどうしても出来なくて、6で出来るかなって思ってアップデートしただけですから(結果、apachectl configtestコマンドに行き着いたのですが)。
            お使いのサーバーのPHPのバージョンの関係とかで、MAMPの最新版でサポートしてるとかじゃない限りはしなくて良いのかなって思うんで、5.5で特別不自由ないならアップデートの必要はないと個人的にはそう思います。
            特別には6系にする必要性ってないと思います。
            起動した時に出るメニュー画面って言うんですか?
            あれが変わったくらいにしか思えませんでしたもん。
            そうそう、PRO版は起動しようとするとクラッシュしてアップデートが出来ないです。

            server.crtが0バイトになる原因は解らないんですけど、キーチェーンに登録とかでなのかな?
            とりあえずserver.crtの作り直しでイケました。
            それと、6系からだけじゃないと思うんですけど、

            Invalid command ‘SSLMutex’, perhaps misspelled or defined by a module not included in the server configuration

            のエラーも出てて、

            SSLMutex “file:/Applications/MAMP/Library/logs/ssl_mutex”

            っていう部分が引っかかってるらしくて、そこ(っていうか、この1行)を「Mutex default」にしてみたところ、エラーは出ませんでした。
            MAMPのエラーログにまともにエラーを吐かなくて、色々と検索して行き着いた先がapachectl configtestで、エラーログをコンソールで開いて見てみるよりも、これで調べた方が確実かもです。
            多分ですけど、2019年製のMacでOSがCatalinaのモデルのだけだと思うんですけど、5.7でも同じ感じエラーが出ると思います。
            他所様のSSL接続の設定で、出来なかったとかっていうのを探していくと、決定的に違うのがそこなんで。

          • かぷりたん より:

            追記です。

            MAMPの6.1が先日リリースされたんですけど、6.1だとPro版でのアップデートでクラッシュする問題が修正されたみたいです。

        • na より:

          6.0がリリースされたのでかすかな期待を寄せていましたが、、、

          皆さんのコメントを拝見するとまだダメそうですね。

          こわくてインストールできず、5.7のまま、制限付きで使っています・・。

  4. Sam より:

    この記事を参考にMAMPのSSL化をさせてもらいました!
    自分の環境はMAMPのバージョン5.7で初めは起動できなかったのですが、下記のサイトを参考にserver.crtを作り直したら起動に成功しました!
    どうやらserver.crtのデータが空になっているのが原因のようで、、、
    参考にしてください〜!

    https://ameblo.jp/ura-tsubakara/entry-12636973420.html

    • ryo より:

      コメントと情報ありがとうございます!
      この記事にもコメントで情報を残してくれてる、かぷりたんさんの記事ですね!
      ありがたい…

      ちなみに、.crtファイルが空になってしまった原因はなんだったんでしょうか?
      かぷりたんさんの記事とコメントでは、原因はわからず作り直したらできたとありましたが、原因が気になります…

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です