macのApacheにSSLを導入した

# はじめに
課題用にApacheで起動したlocalhostにSSLを設定しました。
ローカル用ですので、セキュリティ度外視なことをご了承ください。

#httpd.confの設定

`/usr/local/etc/httpd/httpd.conf`をテキストエディタで開いて、以下の箇所をそれぞれ変更します。

```terminal:usr/local/etc/httpd/httpd.conf
ServerName www.example.com:80
↓コメントを外す
ServerName localhost
```

```terminal:usr/local/etc/httpd/httpd.conf
#LoadModule vhost_alias_module --省略--
↓コメントを外す
LoadModule vhost_alias_module --省略--
```

```terminal:usr/local/etc/httpd/httpd.conf
#Include /usr/local/etc/httpd/extra/httpd-vhosts.conf
↓コメントを外す
Include /usr/local/etc/httpd/extra/httpd-vhosts.conf
```

# Virtual hostの設定
`/usr/local/etc/httpd/extra/httpd-vhosts.conf
`をテキストエディタで開いて、元々のものをすべてコメントアウトしたり、削除します。そのうえで以下の箇所を追加します。

```/usr/local/etc/httpd/extra/httpd-vhosts.conf
<VirtualHost *:80>
   ServerName localhost
   DocumentRoot "/usr/local/var/www"

   <Directory "/usr/local/var/www">
       Options Indexes FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
       Require all granted
   </Directory>
</VirtualHost>
```

# Apacheの再起動
現在の状態でApacheが起動できるか確認するため、再起動してみます。localhostにアクセスできればOKです。

```terminal:terminal
$ sudo apachectl restart
```

# SSLの設定
SSL鍵を作成する場所を作ります。

```terminal:terminal
$ sudo mkdir /etc/apache2/ssl
```

# SSLの作成
以下のコマンドを実行します。

```terminal:terminal
$ sudo openssl genrsa -out /etc/apache2/ssl/localhost.key 2048
$ sudo openssl req -new -x509 -key /etc/apache2/ssl/localhost.key -out /etc/apache2/ssl/localhost.crt -days 3650 -subj /CN=localhost
```

# キーチェーンアクセスへの登録
httpsにアクセスすることが出来るように、キーチェーンアクセスに登録します。

```terminal:terminal
$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /etc/apache2/ssl/localhost.crt
```

# SSL用のバーチャルホスト設定
ターミナル上で、Apacheのバーチャルホストを設定します。

```terminal:/usr/local/etc/httpd/httpd.conf
#LoadModule socache_shmcb_module lib/httpd/modules/mod_socache_shmcb.so
#LoadModule ssl_module lib/httpd/modules/mod_ssl.so
#Include /usr/local/etc/httpd/extra/httpd-ssl.conf
↓コメントを外す
LoadModule socache_shmcb_module lib/httpd/modules/mod_socache_shmcb.so
LoadModule ssl_module lib/httpd/modules/mod_ssl.so
Include /usr/local/etc/httpd/extra/httpd-ssl.conf
```

# httpd-vhosts.confの編集
先程編集したhttpd-vhosts.confをもう一度テキストエディタで開き、SSL用の設定を追加します。

```terminal:/usr/local/etc/httpd/extra/httpd-vhosts.conf
<VirtualHost *:443>
   ServerName localhost
   DocumentRoot "/usr/local/var/www"

   SSLEngine on
   SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
   SSLCertificateFile /etc/apache2/ssl/localhost.crt
   SSLCertificateKeyFile /etc/apache2/ssl/localhost.key

   <Directory "/usr/local/var/www">
       Options Indexes FollowSymLinks
       AllowOverride All
       Order allow, deny
       Allow from all
       Require all granted
   </Directory>
</VirtualHost>
```

#httpd-ssl.confの設定
以下のポート番号を変更します。

```terminal:/usr/local/etc/httpd/extra/httpd-ssl.conf
Listen 8443
↓書き換え
Listen 443
```

ServerNameの箇所をlocalhostに書き換えます。

```terminal:/usr/local/etc/httpd/extra/httpd-ssl.conf
ServerName localhost
```


`/usr/local/etc/httpd/extra/httpd-ssl.conf`から元々記載のある証明書のパスをコメントアウトし、先程作成したもののパスを通します。

```terminal:/usr/local/etc/httpd/extra/httpd-ssl.conf
SSLCerificateFile "/private/etc/apache2/server.crt"
SSLCertificateKeyFile "/private/etc/apache2/server.key"
↓
#SSLCerificateFile "/private/etc/apache2/server.crt"
#SSLCertificateKeyFile "/private/etc/apache2/server.key"
```

先ほど作成した以下の鍵へのパスをそれぞれ追加します。

```terminal:/usr/local/etc/httpd/extra/httpd-ssl.conf
SSLCertificateFile "/etc/apache2/ssl/localhost.crt"
SSLCertificateKeyFile "/etc/apache2/ssl/localhost.key"
```

# Apacheの再起動・確認
Apacheを再起動します。

```terminal:terminal
$ sudo apachectl restart
```

ブラウザを開き、https://localhost にアクセスできれば完了です！

#参考
以下の動画が概要欄のGuideを参考にしつつ設定できるので、非常に分かりやすかったです。
https://www.youtube.com/watch?v=-VxQU1w9L6w
ただいくつか誤植などがあるので、この記事のコードを参考にしたほうが良いと思います。