Vagrant環境でオレオレSSL（たぶんできたけど・・）

参考：http://wiki.centos.org/HowTos/Https

だいたい上のページ通りに進めればOK（たぶん）。
やるにはやったが、けっこう分からないことだらけだったりする。

----

まず必要なものを **yum** でインストール。

```
yum install mod_ssl openssl
```

自分の環境では **openssl** は既に入っていたので **mod_ssl** のみだった。

で、ここからが本番。そしてやっていることをほとんど理解できないという・・・。

```
openssl genrsa -out ca.key 2048
```

ca.keyが出来る。鍵を作ってるのは雰囲気で分かるが、 **2048って何の数値だろう？**

```
openssl req -new -key ca.key -out ca.csr
```

これをやるとなんか色々聞かれた後（本番じゃないし、たぶんテキトーでOK。ただしcommonNameだけ要注意っぽい。サーバドメインに合わせないと後々エラーになる？）にca.csrが出来る。これは錠前みたいなものだろうか？

```
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
```

これが証明書？365は有効期限だと思うから今回は一年間有効なものを作成している。**期限が切れたらまた作り直さないといけないのだろうか？（その場合証明書だけ？それとも鍵から一式全部を新たに作り直すのか？）**

作ったらそれらを規定の場所に置いておく。

```
cp ca.crt /etc/pki/tls/certs/
cp ca.key /etc/pki/tls/private/
cp ca.csr /etc/pki/tls/private/
```

それで、

```
restorecon -RvF /etc/pki/
```

まあとりあえず、という感じで実行。見た目では何も変わらない。 **いったい裏で何が起こっているのだろう？**

そうしたら設定ファイルを書いてみる。

```
vim /etc/httpd/conf.d/ssl.conf
```

ssl用の設定ファイル、無かったので新規作成。

```:ssl.conf
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
```

これだけでいいのだろうか？なんかもっと書かなきゃいけない気がするが・・・・
まあいいや。

```
service httpd restart
```

とりあえず再起動。すると・・・・

>Starting httpd: Syntax error on line 1 of /etc/httpd/conf.d/ssl.conf:
Invalid command 'SSLCertificateFile', perhaps misspelled or defined by a module not included in the server configuration
                                                           [FAILED]

はい駄目でした。モジュールが定義されてない的なことを言いたそうなのでLoadModule書けばいいのかな？
このままssl.confに書いてもたぶん問題ないと思うのだが、他のLoadModuleは **httpd.conf** にまとめて書かれているので自分もそっちに書くことにした。

```:/etc/httpd/conf/httpd.conf
LoadModule ssl_module modules/mod_ssl.so
```

で、再起動。restartだとなぜか失敗したので```service httpd configtest```してみたが特に問題はない。stopしてからstartする手順で一応再起動出来たのでブラウザで試すとhttpsではまだ接続できず。

気を取り直してhttpd.confに以下を書き足す。

```:httpd.conf
NameVirtualHost *:443
#
#
<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/ca.crt
    SSLCertificateKeyFile /etc/pki/tls/private/ca.key
    <Directory /home/vagrant/www/public>
        AllowOverride All
    </Directory>
    DocumentRoot /home/vagrant/www/public/
    ServerName myfirst.test
</VirtualHost>
```

DirectoryとDocumentRootのパスは人によって違うかもしれないが、おそらくデフォルトで書かれている普通のHTTPのほう（```<VirtualHost *:80>```）を真似ていけばOK。
ServerNameは先ほど入力したcommonNameと同じものを書かないと駄目（？）。

そしてまた再起動。 https://myfirst.test にアクセスするも・・・・失敗。

ファイアウォール関係？最初の参考ページに書かれていた以下を実行。

```
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

service iptables save

iptables -L -v
```

コマンドのオプションというものを自分が全く把握していないことを再確認できた感じ。

ともあれこれでrestartすればいけると思いきや・・・・いけなかった。
![正常に接続できませんでした by Firefox](http://i.gyazo.com/9e8791d1ccd64c493e67c869f74ab519.png)
もうさっきからずっとこの画面だ。
参考にしてたページはもう一番下までいっちゃったけど・・・・。

----

で、ググったりしているうちにふと気付いた。次の一行が必要なのでは？

```:httpd.conf
Listen 443
```

書き足したらできたっぽい。

![接続の安全性を確認できません](http://i.gyazo.com/9548506110754129059fd94e25039be2.png)

でも「接続の安全性を確認できません」とある。

技術的詳細のところを見ると

>自己署名をしているためこの証明書は信頼されません。

参考：https://support.mozilla.org/ja/kb/Secure%20Connection%20Failed

う〜ん釈然としないゴールではあるがひとまずこれでいいのかな？
とりあえずセキュリティ例外ってやつに追加したら次からはちゃんと自分のページ出たし、URLのとこにもちゃんと鍵マークは付いてるし、「接続が暗号化されています」とも書いてあるからたぶん大丈夫なのだろうとは思うが・・・。