MacOSⅩにLet's Encryptを入れてみて、Apacheの設定までしてみる

# 1，はじめに
自宅サーバを建てたいのです。
しかし、暗号化通信（https）が使えないのは流石にまずいかなと思い、
だったら無料で使える証明書を使ってみようではないか！
インフラとか全くやったこと無いけれど、とりあえずすべてセットアップしてみてやるぞ！
さあ、[Let's Encrypt](https://letsencrypt.jp/usage/)！！




# 2，Let's Encryptとは
> Let's Encrypt は、認証局（ CA ）として「SSL/TLSサーバ証明書」を無料で発行するとともに、証明書の発行・インストール・更新のプロセスを自動化することにより、TLS や HTTPS（TLSプロトコルによって提供されるセキュアな接続の上でのHTTP通信）を普及させることを目的としているプロジェクトです。
> ≫[Let's Encrypt 総合ポータルより引用](https://letsencrypt.jp/)

なんか無料でhttps通信をさせてくれるらしい（ここ重要
使い方は、[Let's Encrypt の使い方](https://letsencrypt.jp/usage/)を見ればわかりますが、まあ、これを見ながら操作してみます。




# 3，とりあえずインストールしてみる
兎にも角にもやってみましょう。
[Homebrew](http://brew.sh/index_ja.html)を使いますので、インストールしておいてください。
な～に、簡単です。
ターミナルに、

```lang:terminal
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```
を貼っつけるだけですよ。



## 3−1，gitコマンドを使えるようにする
とりあえず、gitを入れましょう。

```lang:terminal
$ brew install git
```

<img width="490" alt="スクリーンショット 2016-08-24 18.10.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/63338/cc6289fb-15a7-8bee-12ac-1aa890b2f0b5.png">



## 3−2，Certbotをダウンロード
Certbotって、証明書を自動取得＆自動更新してくれるロボット君のようですね。

```lang:terminal
$ git clone https://github.com/certbot/certbot
```

いろいろうだうだ出てきた後に、`ls`コマンドを叩くと、**certbot**というフォルダが出現していることがわかります。


## 3−3，Certbotを起動してみる
とりあえず、Certbotのフォルダに移動します。

```lang:terminal
$ cd Certbot
```

そして起動コマンドを叩きます。

```lang:terminal
$ ./certbot-auto
```

<img width="490" alt="スクリーンショット 2016-08-24 18.19.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/63338/3b873c3a-ec55-978e-539f-85da868cbbaa.png">

忠告が出ました。
>警告：Mac OS Xのサポートが現時点では非常に実験的なものです...
あなたはそれを改善する上で動作するように希望の場合は、バックアップを持っていることを確認してください。
そしてその後、--debugフラグで再びこのスクリプトを実行します！
（Google翻訳より）

まあ、とりあえずやってみますか。


```lang:terminal
$ ./certbot-auto --debug
```

Homebrewを使っていろいろダウンロードが始まりました。

<img width="490" alt="スクリーンショット 2016-08-24 18.21.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/63338/08b77146-1332-47d9-6f59-b05cb7887585.png">


うまくいくと、次のような画面が出ます。

<img width="490" alt="スクリーンショット 2016-08-24 18.26.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/63338/26e426df-c932-3c05-db51-a97d6b5933ee.png">

**No**を選択しろとのことなので、Noを選択します。

…………エラーが出ました。


## 3−4，とりあえず、証明書を取得
証明書を取得したいURLを登録します。

サーバを立ち上げてない人は

- [【WindowsでApache】XAMPPでWindowsマシンにWebサーバ環境をメッチャ簡単に構築してみる](http://qiita.com/nnahito/items/ab2f57ffa63ebbea95e5)
- [Yosemite（MacOS:10.10.X）やEl capitanでApacheを使えるようにしてみる](http://qiita.com/nnahito/items/5195d7269ddcd328a5c0)

を読んでみるといいかも。

後、URLをサーバに割り当てたい人は、[NO-IP](http://www.noip.com/)とか使ってみるといいかも。

さあ、証明書を発行します。

```lang:terminal
./certbot-auto certonly --standalone -d example.jp(URL)
```

<img width="490" alt="スクリーンショット 2016-08-24 18.49.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/63338/292cddcd-f389-4381-ba16-8450934bf70e.png">

↓万が一鍵の紛失などをした時の救出用メールアドレスの入力。

<img width="490" alt="スクリーンショット 2016-08-24 18.50.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/63338/50307596-b9fa-5083-89c6-eafbdc432ed0.png">

↓利用規約の同意

<img width="490" alt="スクリーンショット 2016-08-24 18.50.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/63338/391a41ef-407d-2073-bdd7-9a6a9dcae47d.png">

↓Apache起動しっぱなしだからエラー出た…

<img width="490" alt="スクリーンショット 2016-08-24 18.51.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/63338/1a3edaa1-cfe7-2190-fde5-01895570673a.png">

でも、鍵は取得できたっぽいですね！
とりあえず、Apacheを停止します。

```lang:terminal
$ sudo apachectl stop
```

で、再度、

```lang:terminal
./certbot-auto certonly --standalone -d example.jp(URL)
```

すると、うまくいったっぽいですね！

<img width="490" alt="スクリーンショット 2016-08-24 19.12.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/63338/cc3c52fd-efea-74e6-e75e-c581fe83f849.png">


2016年11月22日に証明書が失効するらしいので、それを自動更新するには

```lang:terminal
sudo ./certbot-auto renew
```

を実行しろとのこと。

まあ、とりあえずapacheを起動します。

```lang:terminal
sudo apachectl start
```



# 4，apacheに証明書を適応する
今度は、Apacheに対して証明書を適応させます。

## 4−1，httpd.confをいじる
とりあえず恒例のhttpd.confをいじります。

```lang:terminal
$ sudo vi /private/etc/apache2/httpd.conf
```

`#Include /private/etc/apache2/extra/httpd-ssl.conf`
の「#」を消しましょう。

<img width="490" alt="スクリーンショット 2016-08-24 19.22.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/63338/75e597ca-8a7e-da28-d6f9-690fd9a2064c.png">

同様に
`#LoadModule ssl_module libexec/apache2/mod_ssl.so`
`#LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so`
も「#」を消します。


## 4−2，Apacheに証明書を読みこませる準備
次に、Let's Encryptで発行した証明書をApacheが参照できるところに移動します。
とりあえず、`/etc/apache2/`辺り？

```lang:terminal
$ sudo cp /etc/letsencrypt/live/ドメイン名/cert.pem /etc/apache2/
$ sudo cp /etc/letsencrypt/live/ドメイン名/privkey.pem /etc/apache2/
$ sudo cp /etc/letsencrypt/live/ドメイン名/chain.pem /etc/apache2/
```


## 4−3，Apacheに証明書を読みこませる
4−2で移動させた証明書をApacheに認識させます。

```lang:terminal
$ sudo vim /private/etc/apache2/extra/httpd-ssl.conf
```
↓　以下のデータを追加

```lang:httpd-ssl.conf
SSLCertificateFile "/etc/apache2/cert.pem"
SSLCertificateKeyFile "/etc/apache2/privkey.pem"
SSLCertificateChainFile "/etc/apache2/chain.pem"
```

↓　Apacheの再起動とエラーチェック

```lang:terminal
$ sudo apachectl restart
$ apachectl -t
#Syntax OK
```

<img width="490" alt="スクリーンショット 2016-08-27 17.12.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/63338/efa0dd04-0c46-484a-c4ec-4fba49049005.png">

じゃあ、早速https://にアクセスしてみますか。
`https://ドメイン名`

<img width="1280" alt="スクリーンショット 2016-08-27 17.15.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/63338/a02a16d8-1c8b-cc28-2155-97934f4a6453.png">

うまくいきました！


# 5，表示するフォルダを変えてみる
DocumentRootを変えてみましょう。
It works!だけじゃ面白く無いですからね！！

```lang:terminal
$ sudo vim /etc/apache2/extra/httpd-ssl.conf
```

の、124行目付近の
`DocumentRoot`の値を書き換えましょう。
例：`DocumentRoot "/Users/ユーザ名/Sites/"`

次はその下に有ると思われる、`ServerName`ですね。
No-IPなどのアドレスを指定します。
例：`ServerName hogehoge.zapto.org`

最後に、ディレクションをしましょう。

```
<Directory /Users/ユーザ名/フォルダ名/>
     Require all granted
</Directory>
```

こんなもんですかね？
後は必要に応じて適当に設定してください。

<img width="490" alt="6955eae9-dbac-0c13-ac19-62a48b5e5d03.png" src="https://qiita-image-store.s3.amazonaws.com/0/63338/0fb98d13-bf37-22bc-1328-f5cfd3010813.png">


これで完成です！


# 6，参考文献
- [MacのApacheにLet's Encryptの証明書を適応させたい](https://teratail.com/questions/45450)
- [apache 2.4におけるSSL証明書の設定](http://qiita.com/bageljp@github/items/6b9876b7571852284ead)
- [Gentooの~amd64にApache 2.4.1が来たので試してみた](http://damelog.com/computer/server-administration/apache/gentoo%E3%81%AEamd64%E3%81%ABapache-2-4-1%E3%81%8C%E6%9D%A5%E3%81%9F%E3%81%AE%E3%81%A7%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F/)
- [apache でSSLを使ってみた(基本接続編)](http://server-setting.info/centos/apache-ssl-setting.html#apache_ssl_2)
- [macのapache2でsslとオレオレ証明書の設定](http://qiita.com/astrsk_hori/items/d7ce9636cfcfae5d96f8)
- [Apache 2.4.6 AH01630 client denied by server configuration](http://kaworu.jpn.org/kaworu/2013-11-07-1.php)