以前、MAMPでSSLを設定した際には手間のかかるプロセスを経てサーバー証明書と鍵を作成したんですが、mkcertというローカル環境に認証局(CA)をインストールするコマンドラインツールを使うと一瞬で作成できました。
鍵をしっかり管理しないとセキュリティリスクになるので注意が必要ですが、ローカル開発環境でSSLを手軽に設定できるめちゃくちゃありがたいツールです。
以下、mkcertでサーバー証明書と鍵を作って、MAMP 6.3のApache 2.4に設定するところまでをご紹介します。
Macのバージョンなど
以下の環境で設定、動作確認を行いました。
- macOS Big Sur 11.2.2(Mac mini, M1 2020)
- MAMP 6.3
- mkcert 1.4.3(Homebrew 3.0.4でインストール)
証明書と鍵の作成の設定
1. mkcertのインストール
Homebrewを使ってmkcert をインストールします。※僕の場合Homebrewを使ってインストールしましたが、mkcertのGitHubページ に他のインストール方法も書いてあります。
brew install mkcert
僕はFirefoxをメインに使っているのでnssというツールもインストールしました。
brew install nss
2. ローカル認証局(CA)のインストール
インストールしたmkcertを使って、以下のコマンドでローカル認証局(CA)を設定します。
mkcert -install
3. 証明書と鍵の作成
次に証明書と鍵を作成します。まずは、証明書と鍵を保存するディレクトリに移動します。僕の場合はMAMPのApache用に以下のディレクトリにしました。
cd /Applications/MAMP/conf/apache/keys/
以下のコマンドでlocalhost
用の証明書と鍵を作成します。以下のコマンドを打つとlocalhost.pem
とlocalhost-key.pem
というファイルが作成されます。
mkcert localhost
これでローカル認証局の設定と証明書と鍵の作成が完了です。めちゃくちゃ簡単ですね!
余談になりますがmkcert -install
で作成された鍵ファイルのありかは以下のコマンドで確認できます。セキュリティに関わるのでしっかり管理しましょう!
mkcert -CAROOT
MAMPの設定(v6.3時点)
1. ポートの設定
MAMPのPreferencesのPortsタブでApacheとMySQLのPort番号を変更します。上の画像にある「80 & 3306」のボタンをクリックすると両方とも一気に変更されます。
2. httpd.confの設定変更
/Applications/MAMP/conf/apache/
の中にあるhttpd.conf
ファイルのSSL設定がコメントアウトされてるので「#」を削除して有効にします。httpd.conf
の設定がおかしくなるとサーバーが動かなくなるので、変更前にバックアップを取っておくことをお勧めします(MAMPの場合は/Applications/MAMP/conf/apache/original
にオリジナル・ファイルが入っています)。
# Secure (SSL/TLS) connections
#Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf
以下に変更:
# Secure (SSL/TLS) connections
Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf
3. httpd-ssl.confの設定変更
/Applications/MAMP/conf/apache/extra/
にあるhttpd-ssl.conf
ファイルの以下の部分を変更します。注意)MAMP 5.xを使っている場合はこの変更の必要はありません。
# Semaphore:
# Configure the path to the mutual exclusion semaphore the
# SSL engine uses internally for inter-process synchronization.
SSLMutex "file:/Applications/MAMP/Library/logs/ssl_mutex"
以下に変更:
# Semaphore:
# Configure the path to the mutual exclusion semaphore the
# SSL engine uses internally for inter-process synchronization.
Mutex default
さらに、httpd-ssl.confの以下の4つの項目を変更します。
- DocumentRoot
- ServerName
- SSLCertificateFile
- SSLCertificateKeyFile
以下のDocumentRootとServerNameを変更します。
##
## SSL Virtual Host Context
##
<VirtualHost _default_:443>
# General setup for the virtual host
DocumentRoot "/Applications/MAMP/Library/htdocs"
ServerName www.example.com:443
ServerAdmin you@example.com
ErrorLog "/Applications/MAMP/Library/logs/error_log"
TransferLog "/Applications/MAMP/Library/logs/access_log"
僕の場合は以下のように変更しました:
DocumentRoot "/Users/rriver/Sites/parashuto.com/site"
ServerName localhost
さらにSSLCertificateFileとSSLCertificateKeyFileの値を先ほど作成した証明書と鍵に更新します。
# 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.)
# Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt)
# require an ECC certificate which can also be configured in
# parallel.
SSLCertificateFile "/Applications/MAMP/conf/apache/server.crt"
#SSLCertificateFile "/Applications/MAMP/conf/apache/server-dsa.crt"
#SSLCertificateFile "/Applications/MAMP/conf/apache/server-ecc.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.)
# ECC keys, when in use, can also be configured in parallel
SSLCertificateKeyFile "/Applications/MAMP/conf/apache/server.key"
#SSLCertificateKeyFile "/Applications/MAMP/conf/apache/server-dsa.key"
#SSLCertificateKeyFile "/Applications/MAMP/conf/apache/server-ecc.key"
僕の場合、変更後は以下の通り:
# 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.)
# Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt)
# require an ECC certificate which can also be configured in
# parallel.
SSLCertificateFile "/Applications/MAMP/conf/apache/keys/localhost.pem"
#SSLCertificateFile "/Applications/MAMP/conf/apache/server-dsa.crt"
#SSLCertificateFile "/Applications/MAMP/conf/apache/server-ecc.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.)
# ECC keys, when in use, can also be configured in parallel
SSLCertificateKeyFile "/Applications/MAMP/conf/apache/keys/localhost-key.pem"
#SSLCertificateKeyFile "/Applications/MAMP/conf/apache/server-dsa.key"
#SSLCertificateKeyFile "/Applications/MAMP/conf/apache/server-ecc.key"
これでMAMP 6.3で無事にhttps://localhostが動くようになりました!
さいごにひとこと
mkcertはクロスプラットフォームのツールで、MacだけでなくLinuxやWindows版も提供されているそうです。なので、知っておくと便利なツールですね。開発環境の整備などは極力楽に済ませたいですもんね〜。
では、Happy local SSL development environment!
参考にさせてもらったサイト
英語ですが、以下のページでmkcertの使い方だけでなく、認証局についてなど詳しく説明されていました。すごく勉強になりました。
2021年3月7日に公開され、2022年2月23日に更新された記事です。
About the author
「明日のウェブ制作に役立つアイディア」をテーマにこのブログを書いています。アメリカの大学を卒業後、ボストン近郊のウェブ制作会社に勤務。帰国後、東京のウェブ制作会社に勤務した後、ウェブ担当者として日英バイリンガルのサイト運営に携わる。詳しくはこちら。
ウェブ制作・ディレクション、ビデオを含むコンテンツ制作のお手伝い、執筆・翻訳のご依頼など、お気軽にご相談ください。いずれも日本語と英語で対応可能です。まずは、Mastodon @rriver@vivaldi.net 、Twitter @rriver 、またはFacebook までご連絡ください。