Macのローカル環境でSSL(https://localhost)を使えるようにするための設定方法をまとめました。手順が複雑で忘れてしまいそうなんで(「NHKなんで…」的に)。
(追記: 2021年3月7日)この記事の方法よりも簡単な方法があったので違う記事にまとめました。よければそちらをご覧ください。
この記事を書いた時点では僕の環境(macOS Catalina 10.15.5 / MAMP 5.5)では問題なありませんでしたがMAMP 6.0でApacheが2.4にアップデートされ設定の変更が必要になりました。情報を追加したので、MAMP 6.xをお使いの場合はそちらの設定変更もお忘れなく!この設定を変更したらmacOS Big Sur 11.2.2 / MAMP 6.3で問題なく動きました。
サーバ証明書と鍵を作る
以下の手順でサーバ証明書を設定します。以下の作業はすべてコマンドラインで行います。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)を作る
ここでもいろいろ質問されるので「Common Name」のところだけ「localhost」と入力して、残りはEnterを入力します。
$ 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)。
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つを変更すれば設定完了です。
項目 | 設定 |
---|---|
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"
httpd-ssl.confのSSLMutexの記述を編集する(MAMP 6.0以降のみ)
MAMP 6.0からApacheが2.4.xにアップデートされた ので、httpd-ssl.confにあるSSLMutexという記述を修正する必要があります。MAMP 5.xを使っていてApacheが2.2以前のバージョンの場合は修正の必要はありません。Apacheの2.2から2.4へのアップグレードの公式ガイドのページ にも、この設定を変更するよう記述がありました。僕のMAMP 5.5の環境では、この部分の変更なしで動いています。
MAMP 6.0以降の場合、Apache 2.4からSSLMutexの設定が無効になった ため、この設定を変更しないとエラーが出てサーバーが起動しません(厳密に言うと、SSLMutexがMutexという設定項目に変更された)。そこで、設定を以下のように変更します。
該当箇所
SSLMutex "file:/Applications/MAMP/Library/logs/ssl_mutex"
以下に修正します。
Mutex default
これで全ての設定完了です!
参考にさせてもらったサイト
以下のサイトを参考にさせていただきました。ありがとうございました!
- How to get SSL working with MAMP. – Adam Patterson
- MAMPでSSL(https通信)を使えるようにする手順 | monotone blog
- OpenSSLコマンドの備忘録 – Qiita
- MAMPでSSLが使える様になりました 追記あり | フリーWebデザイナーの何気ない日記
- 【MAMP】Invalid command ‘SSLMutex’を解決する | ゆうきのせかい
更新情報
- httpd-ssl.confの設定変更について情報を追加しました(2021/3/7)
- macOS Big Sur 11.2.2 / MAMP 6.3で設定を確認して情報を追加しました(2021/3/6)
2019年4月1日に公開され、2021年3月7日に更新された記事です。
About the author
「明日のウェブ制作に役立つアイディア」をテーマにこのブログを書いています。アメリカの大学を卒業後、ボストン近郊のウェブ制作会社に勤務。帰国後、東京のウェブ制作会社に勤務した後、ウェブ担当者として日英バイリンガルのサイト運営に携わる。詳しくはこちら。
ウェブ制作・ディレクション、ビデオを含むコンテンツ制作のお手伝い、執筆・翻訳のご依頼など、お気軽にご相談ください。いずれも日本語と英語で対応可能です。まずは、Mastodon @rriver@vivaldi.net 、Twitter @rriver 、またはFacebook までご連絡ください。
初めまして。
あちこちのサイトやブログを参考にMAMPのSSL化をやってるんですけど、
macOS Catalinaの最新版でMAMP5.7でだと、この方法はダメでした。
正確には「この方法でもダメでした」かな。
MAMPを起動してパスの入力をしてApacheを起動させようとすると、
Apache couldn’t be started. Please check your MAMP installation and configuration.
ってエラーが出て。
色々と調べてみたけど全然解らなくてお手上げ状態です^^;
はじめまして。
僕も設定したときはなかなかうまくいかずに大変でした。
手順が複雑で、どこでうまくいっていないのかわかりづらいんですよね。
記事の内容が役に立たなかったようで申し訳ないです。
ちなみに、この設定でmacOS Catalina / MAMP 5.5でも動いているので、OSとMAMPのバージョンは関係ないと思っています。もちろん、100%とは言えないですが。。。
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でだと問題なく動作したんですよね。
リリースノート以外に他に情報もなくて、手詰まりでした^^;
はじめまして。
本記事を100%参考に、SSL環境を構築できて感謝している者です。
環境:MacOS Mojave, MAMP 5.7
内容がわかりやすく、問題なくできました。
今回、Catalinaにアップしようと考えていますが、SSLやWordpressが動かなくなるという一部の記事を見て躊躇しています。
ryoさん、その後 MAMP5.7にされても問題なかったでしょうか?
ひとつの参考として教えていただけたらと思います。
はじめまして。
情報が役に立ったようでなによりです。
実はまだMAMP 5.5を使っていて、5.7で問題なく動くか確認できていません。
以前にコメントいただいた、かぷりたんさんの環境だとCatalina + MAMP 5.7で動かなくなってしまったとのことなので、設定になんらかの変更が必要なのかもしれません。
ちなみに、現在問題なく動いている僕の環境は以下の通りです:
macOS Catalina 10.15.5
MAMP 5.5 (383)
お役に立てずにすみません。。。
MAMP 5.7についてなにか判明したら追記しますね。
ありがとうございます。
MAMP5.5が手元にないのですが、チャレンジしてみようと思っています。
かぷりたんさんの環境では、Catalinaのマイナーアップデート後に動かなくなったとのことなので、5.7では問題がある、またはなんらかの設定変更がある可能性が高いです。
MAMPでSSLが使えなくなった… 追記あり
お気をつけ下さい!
報告です。環境を更新して試しました。
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配下の運用でしのごうと思います。
この情報が今後お役にたつようなら、、、と思います。
そしてもし、これで何か閃かれるようでしたらご教授ください。
(何度もコメントして失礼しました。)
わざわざご報告ありがとうございました!
Catalinaへのアップデート後に問題なかった(または解決できた)ようで安心しました。
僕のほうでも新たにわかったことがあったら追記していこうと思います。
その節はお世話になりました。
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が空になった原因は解りませんけど、作り直しでイケたんで、ご報告しておきますね。
コメントありがとうございます。
情報を追えてなくて返信できてなくてすみません。実は、更新の必要性を感じなくて、僕はまだ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版でのアップデートでクラッシュする問題が修正されたみたいです。
6.0がリリースされたのでかすかな期待を寄せていましたが、、、
皆さんのコメントを拝見するとまだダメそうですね。
こわくてインストールできず、5.7のまま、制限付きで使っています・・。
この記事を参考にMAMPのSSL化をさせてもらいました!
自分の環境はMAMPのバージョン5.7で初めは起動できなかったのですが、下記のサイトを参考にserver.crtを作り直したら起動に成功しました!
どうやらserver.crtのデータが空になっているのが原因のようで、、、
参考にしてください〜!
https://ameblo.jp/ura-tsubakara/entry-12636973420.html
コメントと情報ありがとうございます!
この記事にもコメントで情報を残してくれてる、かぷりたんさんの記事ですね!
ありがたい…
ちなみに、.crtファイルが空になってしまった原因はなんだったんでしょうか?
かぷりたんさんの記事とコメントでは、原因はわからず作り直したらできたとありましたが、原因が気になります…