MAMPにSSLを設定する

#背景
SHOWROOM関連の自作Chrome拡張ツールでDBデータを取るためにajax通信を行う必要がある。
MAMPテスト環境はhttpのままで、apiは拡張ツールを使用するドメインはSSL化されておりMixed Contentが発生する。
対策としてMAMPの環境をSSL化してDBデータの取得を試みる


#実施事項
## windows opensslをダウンロード
[windows openssl](https://slproweb.com/products/Win32OpenSSL.html)からダウンロード
※Win64 OpenSSL v1.1.1i Lightをダウンロードする
opensslにパスを通す(C:\Program Files\OpenSSL-Win64\bin)

##秘密鍵ファイル（server.key）の作成
C:\MAMP\conf\apache に keysフォルダを作成する
C:\MAMP\conf\apacheをカレントディレクトとしコマンドプロンプトで下記を実行する

```
openssl genrsa 1024 > server.key
```

##証明書署名要求(CSR)の作成

コマンドプロンプトで下記を実行する

```
openssl req -new -key server.key > server.csr
```

##SSL サーバ証明書の作成

コマンドプロンプトで下記を実行する

```
openssl x509 -req -days 3650 -signkey server.key < server.csr > server.crt
```

## httpd-ssl.conf 作成
MAMPは"C:\MAMP\bin\apache\conf\original\extra"にhttpd-ssl.confが存在するので"C:\MAMP\conf\apache\extra"にコピーする


## httpd.confでhttpd-ssl.confをインクルードする

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

## httpd-ssl.confの設定

```
#SSLSessionCache        "shmcb:/Apache22/logs/ssl_scache(512000)"
SSLSessionCache        "shmcb:c:\mamp\logs\ssl_scache(512000)"
------------------------------中略--------------------------------
# DocumentRoot "/Apache22/htdocs"
# ServerName www.example.com:443
# ServerAdmin admin@example.com
# ErrorLog "/Apache22/logs/error.log"
# TransferLog "/Apache22/logs/access.log"
DocumentRoot "c:\MAMP\htdocs"
ServerName local-set-tsuko.com
ServerAdmin admin@local-set-tsuko.com
ErrorLog "c:\mamp\logs\ssl_error.log"
TransferLog "c:\mamp\logs\ssl_access.log"
------------------------------中略--------------------------------
# SSLCertificateFile "/Apache22/conf/server.crt"
SSLCertificateFile "C:\MAMP\conf\apache\keys\server.crt"
------------------------------中略--------------------------------
# SSLCertificateKeyFile "/Apache22/conf/server.key"
SSLCertificateKeyFile "C:\MAMP\conf\apache\keys\server.key"
------------------------------中略--------------------------------
# <Directory "/Apache22/cgi-bin">
#     SSLOptions +StdEnvVars
# </Directory>
<Directory "C:\MAMP\cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
------------------------------中略--------------------------------
#CustomLog "/Apache22/logs/ssl_request.log" \
CustomLog "c:\mamp\logs\ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
-----------------------------以下略--------------------------------
```
　
##httpd-vhosts.confのバーチャルホスト設定 

```
# <VirtualHost *:80>
#     DocumentRoot "C:\MAMP\htdocs\set_tsuko"
#     ServerName local-set-tsuko.com
#     <Directory "C:\MAMP\htdocs\set_tsuko">
#         AllowOverride all
#     </Directory>
# </VirtualHost>

<VirtualHost *:443>
    DocumentRoot "C:\MAMP\htdocs\set_tsuko"
    ServerName local-set-tsuko.com
    SSLEngine on
    SSLCertificateFile "C:\MAMP\conf\apache\keys\server.crt"
    SSLCertificateKeyFile "C:\MAMP\conf\apache\keys\server.key"
    <Directory "C:\MAMP\htdocs\set_tsuko">
        AllowOverride all
    </Directory>
</VirtualHost>
```

##local-set-tsuko.comの安全でないコンテンツを許可するに設定する
証明書がオレオレ証明書なので上記を実施する
ブラウザの『サイトの設定』で設定する

#結果
保護されていない通信と表示されるが、Mixed Contentの発生はなくなり目的のajax通信が可能となった

#参考記事
[Mac で MAMP に SSL（https://）を設定](https://www.webdesignleaves.com/pr/plugins/mamp_ssl.html)を参考に
[httpdの設定（ssl.conf）](http://www.nina.jp/server/slackware/httpd/ssl.conf.html)※httpd-ssl.confの設定