OpenSSLで証明書を作成してMAMPのローカル環境でSSL設定する方法(Windows)

MAMP
この記事は約40分で読めます。
スポンサーリンク

OpenSSLで証明書を作成してMAMPのローカル環境でSSL設定する方法(Windows)

MAMP環境でSSL化に必要な作業

  1. OpenSSLを使用して「CA証明書」と「サーバー証明書」を発行します。
  2. MAMPのWebサーバーのApacheの設定ファイルにSSLを有効化するディレクティブを記述します。
  3. ブラウザの証明書ストアに、自分で発行した「CA証明書」をルート証明書として追加します。

※ CA(Certification Authority) : 認証局。

OpenSSLについて

OpenSSLは、業界標準でSSL通信の運用に使用されるオープンソースのソフトウェアです。自分の環境ではいつインストールされたかわからないのですが、Git管理ツール「MINGW64」(今回はターミナルとして利用)で、その存在を確認することができます。

MINGW64のダウンロードは以下のサイトが参考になりました。

MinGW-w64のダウンロードとインストール
C 言語及び C++ の開発環境として無料で利用可能な MinGW(Minimalist GNU for Windows)をインストールすることで Windows 環境でコンパイラである GCC を利用することができます。ここでは Wind...

OpenSSLのバージョンを確認するコマンドです。

openssl version -a

オプション「-a」で、以下のように詳細情報を表示します。

OpenSSL 3.2.0 23 Nov 2023 (Library: OpenSSL 3.2.0 23 Nov 2023)
built on: Sat Nov 25 20:56:28 2023 UTC
platform: Cygwin-x86_64
options:  bn(64,64)
compiler: gcc  -march=nocona -msahf -mtune=generic -O2 -pipe -DTERMIOS -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DNDEBUG
OPENSSLDIR: "/usr/ssl"
ENGINESDIR: "/usr/lib/openssl/engines-3"
MODULESDIR: "/usr/lib/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0x7ffaf3ffffebffff:0x29c6fbf

証明書の発行

ルートCA証明書」と「サーバー証明書」を発行する作業をします。

  • ルートCA証明書 : 認証局(今回は自分)がルート認証局であることを証明するために自己署名した証明書です。(クライアントの証明書ストアに設置します。)
  • サーバー証明書 : ドメイン(今回の環境では「localhost」)の所有権者であることを証明するために認証局が発行した証明書です。(サーバーに設置します。)

ローカル運用なので、申請も発行もターミナルでOepnSSLを利用して自分で行います。

※ OpenSSLでは、公開鍵証明書の標準規格の「X.509」フォーマットで「証明書」が作成されます。(現行はバージョン3なので、「X.509 v3証明書」とも呼ばれます。)

手順
  1. 管理用のフォルダを作成。
  2. CAの秘密鍵」を作成。
  3. CAの秘密鍵」を使用して「CAの証明書署名要求」(CSR : Certificate Signing Request)を作成。
  4. CAの秘密鍵」で「CAのCSR」に自己署名して「CA証明書」を発行。
  5. 簡易なCAの環境を構築。
  6. サーバーの秘密鍵」を作成。
  7. サーバーの秘密鍵」を使用して「サーバーのCSR」を作成。
  8. CAの秘密鍵」と「CA証明書」を使用して「サーバーのCSR」にCAとして署名して「サーバー証明書」を発行。
管理用のフォルダを作成

mkdir -p /c/MAMP/conf/apache/ssl  #ディレクトリを作成
cd /c/MAMP/conf/apache/ssl    #作成したディレクトリに移動

C:\MAMP\conf/apache/ssl」ディレクトリを基本的な作業ディレクトリとします

「CAの秘密鍵」を作成

openssl genrsa」コマンドを使用して、鍵長が2048bitのRSA暗号の「秘密鍵」を生成し、任意の名前(ここでは「localhost.key」)でファイルにして出力します。

※ 自分でローカル運用するだけなので、鍵長は特に気にせず現在の認証局で一般的とされる2048bitを指定していくことにします。(「openssl genrsa」コマンドのデフォルトの鍵長は2048bitなので、下記の場合は鍵長を指定しなくても同じです。)

openssl genrsa -out localhost.key 2048

Generating RSA private key, 2048 bit long modulus (2 primes)
...................................................................................+++++
......................+++++
e is 65537 (0x010001)
「CAの秘密鍵」を使用して「CAの証明書署名要求」(CSR : Certificate Signing Request)を作成

openssl req -new -key (秘密鍵ファイル名) -out (CSRファイル名)
openssl req -new -key localhost.key -out localhost.csr

openssl req」コマンドを使用して、「CAの秘密鍵」(上記で作成した「localhost.key」)を使って「CSR」を生成し、任意の名前(ここでは「localhost.csr」)でファイルにして出力する。

openssl req」コマンドを実行すると、「CSR」に必要な情報を対話型で求められるので入力します。

  • 自分で認証して自分だけが使うローカル運用なので、入力は任意です。
  • CA証明書」の場合、「Organization Name」だけは必須の項目です。
  • 他の情報も入力しておけば、証明書ストアに追加したあとで詳細情報として確認できます。
  • 情報を入力しない場合は、未入力のまま「enter」キーで決定して次へ進めます。(デフォルトの「config」ファイルに値があれば使用されます。)
  • 最後の「Email Address」「password」「company name」(下記では未入力)を「enter」キーで決定すると「localhost.csr」が作成されます。
#実行結果
$ openssl req -new -key localhost.key -out localhost.csr
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) [AU]:JP
State or Province Name (full name) [Some-State]:tokyo
Locality Name (eg, city) []:shinjyuku-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:sample labo
Organizational Unit Name (eg, section) []:customer
Common Name (e.g. server FQDN or YOUR name) []:shirakawa aki
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
「CAの秘密鍵」で「CAのCSR」に自己署名して「CA証明書」を発行

[ 証明書の拡張領域に追加する情報を用意 ]

Firefoxに対応するため、証明書の拡張領域の記述で「CA証明書」であることを明示しておく必要があります。

記述したい設定(「basicConstraints = critical,CA:true」)を、追加情報として任意のテキストファイルにして別途用意しておく。(ここでは「localhost.txt」。)

echo basicConstraints = critical,CA:true > localhost.txt

[ CA証明書の発行 ]

openssl x509」コマンドを使用して、「CAの秘密鍵」で「CAのCSR」に自己署名をして「CA証明書」を生成します。

  1. 有効期限」を設定。(下記では3650日に設定)
  2. 拡張領域に追加する情報を持った入力ファイルを指定。(ここでは「localhost.txt」)
  3. CAの秘密鍵」を指定。(ここでは「localhost.key」)
  4. CAのCSR」を指定。(ここでは「localhost.csr」)
  5. 出力ファイルの名前を指定。(ここでは「localhost.crt」)

openssl x509 -req -days 3650 -in localhost.csr -signkey localhost.key -out localhost.crt

#実行結果
$ openssl x509 -req -days 3650 -in localhost.csr -signkey localhost.key -out localhost.crt
Certificate request self-signature ok
subject=C=JP, ST=tokyo, L=shinjyuku-ku, O=sample labo, OU=customer, CN=shirakawa aki

[ 証明書の内容を確認 ]

openssl x509」コマンドを使用して、作成した「CA証明書」の内容を念のために確認します。

CSR作成時に入力した情報、有効期限、公開鍵、署名データなどが表示されます。

※ 正しく発行できていれば「localhost.txt」と「localhost.csr」は不要なので削除して構いません。

openssl x509 -in localhost.crt -text -noout

#実行結果
$ openssl x509 -in localhost.crt -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            45:69:cf:f3:4c:c2:56:1a:dd:a1:43:e1:d8:98:56:b6:5f:8e:42:eb
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=JP, ST=tokyo, L=shinjyuku-ku, O=sample labo, OU=customer, CN=shirakawa aki
        Validity
            Not Before: Jan 28 05:07:17 2024 GMT
            Not After : Jan 25 05:07:17 2034 GMT
        Subject: C=JP, ST=tokyo, L=shinjyuku-ku, O=sample labo, OU=customer, CN=shirakawa aki
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:ba:85:81:17:f4:24:08:8a:58:57:ad:45:50:a3:
                    e8:63:a1:9b:09:8c:de:f0:5b:72:1c:07:cb:bb:c8:
                    28:a8:08:82:0d:96:38:06:1d:1c:d8:c8:c2:cb:36:
                    0f:cf:9e:b1:2e:19:c2:94:76:cf:f3:0b:92:c7:52:
                    fe:76:11:5e:b2:8a:12:4b:8b:f7:fc:49:7c:33:59:
                    fb:d8:c1:0b:62:0e:c2:c8:67:4d:f9:58:a6:a1:74:
                    25:85:26:9c:a6:84:56:56:4d:0c:b4:77:68:b3:43:
                    c1:9c:1e:1b:59:d0:f2:52:c5:94:b2:4d:6f:f8:8f:
                    4f:0e:0c:49:de:39:b0:26:86:63:47:9f:51:f6:4f:
                    fc:80:9e:57:f4:ef:90:a5:58:6a:88:9f:fd:b9:12:
                    88:d4:18:09:28:27:f9:32:a7:da:28:c6:29:d5:4d:
                    8a:b3:0f:44:a5:92:23:1a:32:ac:5b:4c:4d:69:fc:
                    da:e2:89:32:59:58:bf:89:1c:71:79:d2:f5:79:5a:
                    68:eb:2a:91:70:fb:d2:5c:93:bf:51:45:68:bf:61:
                    05:03:da:1f:3b:02:03:03:34:e1:e8:e4:b1:97:3b:
                    5b:1a:59:3b:7a:39:fb:81:b0:c7:a2:d4:4c:f8:b0:
                    45:31:00:a5:52:9a:27:ba:6f:a9:dd:8b:43:94:f6:
                    40:a3
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                77:02:ED:47:3F:AB:85:BC:9C:3C:BD:0A:4D:50:AB:AF:01:3F:77:02
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        4a:35:76:35:69:50:95:a7:4a:20:db:80:a1:c9:7f:e8:40:f4:
        39:b9:fd:7a:64:e3:c0:fc:4f:04:6c:b1:7d:13:95:b8:d0:a8:
        90:41:82:b0:b2:02:79:5c:16:b6:c7:a2:7a:89:11:8d:b7:27:
        3f:cb:ad:0a:4a:11:37:40:14:d4:12:40:d4:4d:61:55:bd:79:
        7b:cf:63:8d:0e:9a:6e:41:8d:5c:4d:1c:da:39:45:38:28:ad:
        91:70:ce:0c:7c:e3:b1:ed:7e:5f:9e:30:a8:42:09:dc:81:97:
        17:a4:03:2a:ff:d5:5d:83:2e:c5:ea:32:e4:15:e6:11:27:7c:
        01:18:8d:84:f7:2f:29:bd:e9:61:4f:46:37:d1:7b:19:68:98:
        66:10:53:89:44:f9:95:fc:09:93:79:ad:f3:ef:07:1e:87:dd:
        5c:de:8b:52:6d:07:2d:5c:55:e7:a3:68:99:74:f3:68:64:be:
        77:b0:12:9e:fa:af:5a:b3:b3:1d:d3:0e:9b:13:f2:15:c5:08:
        3c:bf:87:82:25:ba:e9:e0:d3:67:51:9b:cd:90:5f:75:98:88:
        7b:98:bf:08:d0:39:e0:6f:21:bb:fa:51:8f:35:bd:61:0c:5c:
        f0:b6:62:a9:a4:dc:7a:25:25:44:be:b5:21:10:21:e6:a4:34:
        4a:71:9b:1b
「サーバーの秘密鍵」を作成

自分がCAとなって「openssl ca」コマンドを使用して「サーバー証明書」を発行するので、事前に簡易なCA環境を構築します。

※ 「openssl ca」コマンドは、最小限のCAアプリケーション機能を提供するコマンドです。

[ CA環境構築の各ファイルを作成 ]

必要なファイルを、ターミナルからコマンドで生成します。

  1. CA環境構築に必要なファイルをまとめて保管するディレクトリを作成。(ここでは「moyasea」)
  2. 初期値「01」を記述したシリアルナンバーの管理ファイルを作成。(ここでは「serial」)
  3. データベース用のファイルを作成。(ここでは「moyaseadb」)
  4. config」ファイルを作成。(ここでは「openssl.cnf」)

mkdir moyasea #ディレクトリを作成
echo 01 > moyasea/serial #シリアルナンバー用のファイルを作成
touch moyasea/moyaseadb #データベース用のファイルを作成
touch moyasea/openssl.cnf #「config」ファイルを作成

[ 「config」ファイルに設定内容を記述 ]

作成した「config」ファイル(「openssl.cnf」)に、「openssl ca」コマンドで使用する設定と値を記述しておきます。

  • openssl ca」コマンドを実行すると、「config」ファイル内の「[ ca ]」セクションが読み込まれます。(「openssl」コマンドのサブコマンド名に該当するセクションの記述が読み込まれます。)
  • 読み込まれたセクション内の設定値に他のセクション名が指定されていれば、さらにそのセクションの設定が読み込まれます。
  • ChromeとFirefoxに対応するために、「x509_extensions」の項目に以下の2つの設定が必要。(「X.509 v3」フォーマットの拡張領域へ記述される。)
    Chrome対応 : 「subjectAltName」の値に自分のローカル環境でのドメインとIPアドレスを記述。
    Firefox対応 : 「basicConstraints」の値に「サーバー証明書」であることを明示する「CA:false」を記述。

ターミナル上でCUIエディターを使用するか、GUIエディターで「openssl.cnf」を開いて下記を記述して保存します。

[ ca ]
default_ca			= CA_default
[ CA_default ]
dir				= /c/MAMP/conf/apache/ssl/moyasea
new_certs_dir		        = $dir
serial				= $dir/serial
database			= $dir/moyaseadb
default_md			= sha256
policy				= policy_anything
x509_extensions		        = v3_ca
[ policy_anything ]
countryName			= optional
stateOrProvinceName		= optional
localityName			= optional
organizationName		= optional
organizationalUnitName	= optional
commonName			= supplied
emailAddress			= optional
[ req ]
default_bits		        = 2048
distinguished_name	        = req_distinguished_name
x509_extensions                 = v3_ca
[ req_distinguished_name ]
countryName			= Country Name (2 letter code)
countryName_default		= AU
countryName_min			= 2
countryName_max			= 2
stateOrProvinceName		= State or Province Name (full name)
stateOrProvinceName_default	= Some-State
localityName			= Locality Name (eg, city)
0.organizationName		= Organization Name (eg, company)
0.organizationName_default	= Internet Widgits Pty Ltd
organizationalUnitName	        = Organizational Unit Name (eg, section)
#organizationalUnitName_default	=
commonName			= Common Name (e.g. server FQDN or YOUR name)
commonName_max			= 64
emailAddress			= Email Address
emailAddress_max		= 64
[ v3_ca ]
subjectAltName			= DNS:localhost, IP:127.0.0.1
basicConstraints		= CA:false

[サーバーの秘密鍵を作成]

CAの秘密鍵」のときと同じように、「サーバーの秘密鍵」を生成して任意の名前(ここでは「server.key」)でファイルにして出力します。

openssl genrsa -out server.key 2048

Generating RSA private key, 2048 bit long modulus (2 primes)
.................................................................................+++++
..............................................+++++
e is 65537 (0x010001)
「サーバーの秘密鍵」を使用して「サーバーのCSR」を作成

CAのCSR」のときと同じように、「サーバーの秘密鍵」(「server.key」)を使って「サーバーのCSR」を生成し、任意の名前(ここでは「server.csr」)でファイルにして出力します。

このときに、すべての入力情報を「CAのCSR」と全く同じ内容で設定すると、「発行した証明書の申請者」とそれを認証している「CA証明書」(認証局)が同一となるため、このあとで発行する証明書が「自己署名証明書」扱いになってしまい、「サーバー証明書」としては使えなくなってしまいます。(最低1つ以上の項目で入力内容を変える必要があります。ここでは「CN」の有無が異なります。)

  • サーバー証明書」のCSRの場合、「Common Name」は必須の項目です。
  • Common Name」は、実際に「サーバー証明書」を設置するサイトのドメインを入力する必要があります。(今回は「localhost」。)
  • 最後の「password」(下記では未入力)を「enter」キーで決定すると「server.csr」が作成されます。

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

#実行結果
$ openssl req -new -key server.key -out server.csr
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) [AU]:JP
State or Province Name (full name) [Some-State]:tokyo
Locality Name (eg, city) []:shinjyuku-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:sample labo
Organizational Unit Name (eg, section) []:customer
Common Name (e.g. server FQDN or YOUR name) []:shirakawa aki
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
「CAの秘密鍵」と「CA証明書」を使用して「サーバーのCSR」にCAとして署名して「サーバー証明書」を発行

以下に続きます。

「サーバー証明書」を作成(発行)

openssl ca」コマンドを使用して、自分がCAとなって「サーバー証明書」を発行します。

  1. 有効期限」を設定。(下記では3650日に設定)
  2. サーバーのCSR」を指定。(ここでは「server.csr」)
  3. CAの秘密鍵」を指定。(ここでは「localhost.key」)
  4. CAの証明書」を指定。(ここでは「localhost.crt」)
  5. 出力ファイルの名前を指定。(ここでは「server.crt」)
  6. コマンドの設定ファイル」を指定。(ここでは「openssl.cnf」)

openssl ca -days 3650 -in server.csr -keyfile localhost.key -cert localhost.crt -out server.crt -config moyasea/openssl.cnf -batch

ここで次のようなエラーが出て詰んでいます。どうもserver.crtとserver.keyだけあればいいのかも知れません。

Using configuration from moyasea/openssl.cnf
Can't open "moyasea/openssl.cnf" for reading, No such file or directory100000000A000000:error:80000002:system library:BIO_new_file:No such file or directory:crypto/bio/bss_file.c:67:calling fopen(moyasea/openssl.cnf, r)
100000000A000000:error:10000080:BIO routines:BIO_new_file:no such file:crypto/bio/bss_file.c:75:

別の手段として

openssl x509」コマンドを使用して、「サーバー証明書」を発行する。

  1. 有効期限」を設定。(下記では3650日に設定)
  2. サーバーのCSR」を指定。(ここでは「server.csr」)
  3. 出力ファイルの名前を指定。(ここでは「server.crt」)

openssl x509 -req -days 3650 -signkey server.key -in server.csr -out server.crt

#実行結果
$ openssl x509 -req -days 3650 -signkey server.key -in server.csr -out server.crt
Certificate request self-signature ok
subject=C=JP, ST=tokyo, L=shinjyuku-ku, O=sample labo, OU=customer, CN=shirakawa aki

[証明書の中身を確認]

openssl x509 -in server.crt -text -noout

#実行結果
$ openssl x509 -in server.crt -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            57:f0:20:93:a6:bd:32:f6:0a:d8:e8:22:48:1b:27:32:f6:3f:c7:42
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=JP, ST=tokyo, L=shinjyuku-ku, O=sample labo, OU=customer, CN=shirakawa aki
        Validity
            Not Before: Jan 28 05:23:03 2024 GMT
            Not After : Jan 25 05:23:03 2034 GMT
        Subject: C=JP, ST=tokyo, L=shinjyuku-ku, O=sample labo, OU=customer, CN=shirakawa aki
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:ae:2f:ed:90:2a:11:81:45:e7:22:8c:03:45:8f:
                    4b:c5:fd:f3:61:51:64:3e:ba:b8:47:05:5d:4c:4b:
                    00:93:c6:7c:23:65:fb:69:a7:2d:79:df:5c:a5:65:
                    83:b0:3d:6a:50:d1:bb:e5:8b:f2:03:9a:73:62:e4:
                    6b:17:54:aa:35:60:0a:8a:53:ad:da:52:0e:f3:2f:
                    05:08:94:da:b2:94:92:8c:bb:2c:b9:6e:fd:6b:05:
                    ee:45:15:0b:d0:b3:30:eb:04:5b:e8:dc:a3:98:78:
                    fa:d5:bf:f2:24:08:65:90:ef:dc:35:c7:bb:f5:88:
                    f4:07:7f:b9:f6:63:02:1e:25:2d:84:e6:85:d6:be:
                    9c:45:9d:14:90:5b:d6:40:2f:d4:d6:79:60:88:93:
                    a1:91:28:79:13:dd:75:29:73:19:74:9d:9d:80:be:
                    b9:a4:3e:94:d7:0e:1a:69:b2:2c:f1:a9:23:5f:fc:
                    9b:2d:c2:4b:81:ea:1f:c9:56:57:98:fe:ad:c5:74:
                    20:8e:ba:69:33:45:1d:6a:c0:6f:74:82:2f:c9:fd:
                    61:52:76:57:a0:8c:68:b1:ba:1b:e4:b1:ae:94:3f:
                    96:53:52:24:b3:fd:88:fa:21:90:3e:87:dc:8e:81:
                    20:56:79:9a:84:b2:44:1b:b7:b1:86:65:5a:b2:5c:
                    49:d9
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                1B:67:94:AB:87:1B:C3:C6:7F:0D:FA:13:32:BB:AF:9F:E0:66:46:2E
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        57:cd:63:e7:eb:db:f0:83:77:0d:27:c2:b4:a3:ae:11:82:98:
        64:6e:fa:8b:80:f7:38:75:57:57:e8:78:a8:2c:d1:85:b2:15:
        b9:1c:d7:04:7d:2a:8d:9e:b8:4d:2f:6d:81:78:20:a6:54:a1:
        44:6c:c3:6b:3a:29:e2:23:56:e2:f5:0d:34:84:4b:cb:82:32:
        50:35:67:54:95:67:9a:d2:ce:4d:a8:95:05:00:5c:1a:0a:b9:
        ae:36:37:2d:6c:00:6b:a6:48:ef:4a:9f:42:38:c8:d5:af:4e:
        8f:ef:e8:15:67:05:97:3a:e0:82:32:70:de:fe:26:d6:3a:8b:
        ed:ff:7a:54:0b:b3:36:06:12:7d:01:4b:7a:a2:ac:7f:e6:b9:
        b2:51:0b:3d:48:da:0b:fa:79:2f:49:e5:af:24:1d:eb:a5:c1:
        4c:76:25:50:f1:d7:36:77:d4:3a:d5:ba:d3:64:6a:78:ab:97:
        ba:5f:ef:85:0a:07:c3:d7:50:3a:36:d6:aa:b1:7c:7e:55:c4:
        28:ce:c7:d7:72:ce:c6:13:66:6a:73:6d:ab:1d:bc:16:f8:bf:
        3c:4f:3b:0b:da:54:21:70:3c:79:4a:63:ff:e8:6d:92:09:2d:
        63:8e:f7:24:07:27:78:bc:a9:75:d0:87:a3:93:4e:d3:dc:4f:
        e3:ba:a6:87

証明書ファイルの有効化

証明書を発行しても、有効化しておかなくてはMAMPは動きません。
server.crtとlocalhost.crtの有効化を行います。

証明書のインストール」をクリックします。

ローカルコンピューター」を選択し、「次へ」を押します。

証明書をすべて次のストアに配置する」を選択し、「参照」ボタンを押すとポップアップが出るので、「信頼されたルート証明機関」を選択して、「OK」ボタンを押して、「次へ」ボタンを押します。

これで、証明書ファイルの有効化が行えました。

万一、証明書を消した。または、消したいといった場合には、ファイルだけでなく、「certmgr.msc」コマンドをWin+Rボタンで出た窓から実行して、処理を行ってください。

Apacheの設定

MAMPで使用しているWebサーバーのApacheにSSLの設定をする作業です。

以下の2つのApacheの設定ファイルを編集します。

  1. httpd.conf : Apacheの主要な設定が記述してあるテキストファイル。
  2. httpd-ssl.conf : ApacheのSSLに関する設定が記述してあるテキストファイル。
「httpd.conf」ファイルの記述を編集

C> MAMP > conf > apache」ディレクトリにある「httpd.conf」ファイルを任意のエディターで開きます。

以下の箇所を、編集します。(# MAMP virtual hostsの下の行の#のコメントアウトを外します。(551行目あたり)ない場合は追記してください。)

# MAMP virtual hosts
Include "C:\MAMP\conf\apache\extra\httpd-vhosts.conf"

以下の箇所を、編集します。(# Secure (SSL/TLS)の下の行の#のコメントアウトを外し、保存します。(592行目あたり)上同様、ない場合は追記してください。)

# Secure (SSL/TLS) connections
Include "C:\MAMP\conf\apache\extra\httpd-ssl.conf"

「httpd-ssl.conf」ファイルを編集

Apacheに「サーバー証明書」と「サーバーの秘密鍵」を設定してSSLを有効にする作業です。

C\MAMP\bin\apache\conf\extra」ディレクトリにある「httpd-ssl.conf」ファイルを、「C\MAMP\conf\apache\extra」ディレクトリを作成し、コピーします。

「SSLSessionCache」を変更

コピーした「httpd-ssl.conf」ファイルを編集します。今回の環境では大体88行目から。

SSLSessionCache "shmcb:/Apache24/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300

これを次のように変更します。

SSLSessionCache "shmcb:c:\mamp\logs\ssl_scache(512000)"
SSLSessionCacheTimeout 300

「DocumentRoot」と「ServerName」を変更

General setup for the virtual host」を検索して、ローカル環境で実際に使用している「ドメイン」とその「ルートディレクトリ」に変更します。(今回の環境では122行目)

# General setup for the virtual host
DocumentRoot "/Apache24/htdocs"
ServerName www.example.com:443
ServerAdmin admin@example.com
ErrorLog "/Apache24/logs/error.log"
TransferLog "/Apache24/logs/access.log"

これを次のように変更します。

# General setup for the virtual host
DocumentRoot "C:\MAMP\htdocs"
ServerName localhost:443
ServerAdmin admin@example.com
ErrorLog "C:\MAMP\logs\error.log"
TransferLog "C:\MAMP\logs\access.log"

「サーバー証明書」のファイルパスを変更

Server Certificate:」で検索して、自分で発行した「サーバー証明書」が配置してあるファイルパスに変更します。(今回の環境では134行目)

# 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 "/Apache24/conf/server.crt"
#SSLCertificateFile "/Apache24/conf/server-dsa.crt"
#SSLCertificateFile "/Apache24/conf/server-ecc.crt"
SSLCertificateFile "C:\MAMP\conf\apache\ssl\server.crt"

「サーバーの秘密鍵」のファイルパスを変更

Server Private Key:」で検索して、自分で作成した「サーバーの秘密鍵」が配置してあるファイルパスに変更します。(今回の環境では150行目)

# 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 "/Apache24/conf/server.key"
#SSLCertificateKeyFile "/Apache24/conf/server-dsa.key"
#SSLCertificateKeyFile "/Apache24/conf/server-ecc.key"
SSLCertificateKeyFile "C:\MAMP\conf\apache\ssl\server.key"

254行目を変更

SSLOptions +StdEnvVars」で検索して、ファイルのパスを変更します。

<Directory "/Apache24/cgi-bin">
  SSLOptions +StdEnvVars
</Directory>

これを次のように変更します。

# <Directory "/Apache24/cgi-bin">
#  SSLOptions +StdEnvVars
# </Directory>
<Directory "C:\MAMP\cgi-bin">
  SSLOptions +StdEnvVars
</Directory>

290行目を変更

Per-Server Logging:」で検索して、ファイルのパスを変更します。

# Per-Server Logging:
# The home of a custom SSL log file. Use this when you want a
# compact non-error SSL logfile on a virtual host basis.
#CustomLog "/Apache24/logs/ssl_request.log" \
CustomLog "c:/mamp/logs/ssl_request.log" \
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

hostsを編集

Windowsのどこかにある(多分「/c/Windows/System32/drivers/etc」)hostsファイルに次の文を追記します(自分の環境の場合はこれ)。

127.0.0.1 localhost
127.0.0.1 moyasea

hostsの上書きができない場合
  1. hostsファイルを右クリック > 「プロパティ」を開く
  2. セキュリティ」タブ > 「グループ名またはユーザー名」の「編集」をクリック
  3. 追加」ボタンをクリック
  4. 詳細設定」をクリックし、「検索」を押して出てきた「Users」を選択して「OK」をクリック
  5. ユーザーまたはグループの選択の画面に戻ったら、「OK」をクリック
  6. Users」の「アクセス許可」で、「フルコントロール」にチェックを入れ、「OK」をクリック
  7. 警告が出たら「OK」をクリック

MAMPを再起動

MAMPを再起動します。設定が間違っていなければ、ApacheとMySQLが立ち上がります。

立ち上がらない場合

MAMPの権限が間違っている場合

MAMPフォルダのUsersの権限を「フルコントロール」にしなければならないケースがあります。
これを許可してください。

フルコントロール」にチェックを入れて「OK」を押します。

apacheにエラーがある場合

/c/MAMP/logs」下の、apache_error.logを見てみてください。ログを確認したところ、次のようなログを吐いています。

[Sun Jan 28 13:40:50.650998 2024] [ssl:warn] [pid 10420:tid 204] AH01873: Init: Session Cache is not configured [hint: SSLSessionCache]
[Sun Jan 28 13:40:50.655037 2024] [lbmethod_heartbeat:notice] [pid 10420:tid 204] AH02282: No slotmem from mod_heartmonitor
[Sun Jan 28 13:40:50.962163 2024] [mpm_winnt:notice] [pid 10420:tid 204] AH00455: Apache/2.4.33 (Win64) OpenSSL/1.0.2u mod_fcgid/2.3.9 PHP/8.0.1 configured -- resuming normal operations
[Sun Jan 28 13:40:50.962163 2024] [mpm_winnt:notice] [pid 10420:tid 204] AH00456: Server built: Jul 6 2021 12:22:16
[Sun Jan 28 13:40:50.962163 2024] [core:notice] [pid 10420:tid 204] AH00094: Command line: 'C:\MAMP\\bin\apache\bin\httpd.exe -d C:/MAMP/bin/apache -f C:\MAMP\\conf\apache\httpd.conf'
[Sun Jan 28 13:40:50.969670 2024] [mpm_winnt:notice] [pid 10420:tid 204] AH00418: Parent: Created child process 29140
[Sun Jan 28 13:40:52.761246 2024] [ssl:warn] [pid 29140:tid 508] AH01873: Init: Session Cache is not configured [hint: SSLSessionCache]
[Sun Jan 28 13:40:52.763254 2024] [lbmethod_heartbeat:notice] [pid 29140:tid 508] AH02282: No slotmem from mod_heartmonitor
[Sun Jan 28 13:40:52.794396 2024] [mpm_winnt:notice] [pid 29140:tid 508] AH00354: Child: Starting 64 worker threads.

解決策としては、

C:\MAMP\conf\apache」下の「httpd.conf」を開き、

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

この一文がなければ追記をします。
次に、「C:\MAMP\conf\apache\extra\httpd-ssl.conf」を開き、

SSLSessionCache "shmcb:c:\mamp\logs\ssl_scache(512000)"

この一文がなければ追記をします。
ファイルを保存し、MAMPを再起動してみてください。どうでしょうか?

mampapp.logでエラーが出ている場合

2024/01/28 (日) 21:28:39 : Could not set access rights on folder: C:\MAMP\logs
2024/01/28 (日) 21:28:41 : There was an error in downloading or decoding image for banner.

このようなエラーである場合、こちらのサイトが参考になりました。

『備忘録(雑多)』
■Excelでフィルタがかけられた状態で非表示のデータを無視してコピーする方法 ・Excelでフィルタをかける・コピーする部分を範囲選択・「Alt」+「;」を…

現在、以下のエラーで詰まっています。

2024/01/28 (日) 21:28:41 : There was an error in downloading or decoding image for banner.

直訳すると?

バナーの画像のダウンロードまたはデコード中にエラーが発生しました。

恐らくデコードで失敗していると思われますが、今夜はこの辺で調査終了です。リライト頑張ります

最後に

今後の課題として調べておきます。

自分が詰まったところとしては、各種設定を、bashの書き方(例えば、「/c/MAMP/htdocs」としていたところを、「C:\MAMP\htdocs」としたら解決しました。

MAMPはもともとMac用に開発されたプラットフォームなので、そこら辺で表記がMac用になっているところがあるようです。

直接的な解決に結びついたサイトをご紹介します。

MAMPにSSLを設定する - Qiita
#背景SHOWROOM関連の自作Chrome拡張ツールでDBデータを取るためにajax通信を行う必要がある。MAMPテスト環境はhttpのままで、apiは拡張ツールを使用するドメインはSSL化さ…

大変助かりました。

白川秋
白川秋

最後までお読みいただきありがとうございました。

コメント