RaspberryPiでApache2をHTTPSに対応させたい！

#手順

###1. OpenSSLのインストール
ラズパイのパッケージにすでに含まれているが、なければインストール
`sudo apt-get install openssl`

インストールされているかの確認は
`openssl`
と打つとインストールされていればプロンプトが
`OpenSSL>`になる。※`exit`で抜けれる。


###2. 秘密鍵の生成
今回はApache2配下にフォルダを作成してそこに保存することとした。
`sudo mkdir /etc/apache2/ssl`
`cd /etc/apache2/ssl`
`sudo openssl genrsa -des3 -out server.key 1024`

```
pi@raspberrypi ~ $ sudo openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
.................++++++
.................++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:パスワード入力
Verifying - Enter pass phrase for server.key:パスワード再入力
```
このままだとApache起動のたびにパスワード入力を求められるためEncriptを解除しましょう。
`sudo openssl rsa -in server.key -out server.key`

```
pi@raspberrypi ~ $ sudo openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:先ほど設定したパスワードを入力
writing RSA key
```

###3. サーバ証明書の生成
まずは要求ファイルを作成します。
`sudo openssl req -new -days 3650 -key server.key -out server.csr`

```
pi@raspberrypi ~ $ sudo openssl req -new -days 3650 -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) []:xxx
Organization Name (eg, company) [Internet Widgits Pty Ltd]:xxx
Organizational Unit Name (eg, section) []:xxx
Common Name (e.g. server FQDN or YOUR name) []:127.0.0.1:443 #今回はローカルループバックアドレスを指定
Email Address []:mail@sample.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:空白
An optional company name []:空白
```

これで要求ファイルが生成できたので証明書を発行しましょう。
`sudo openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650`

```
pi@raspberrypi ~ $ sudo openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
Signature ok
subject=/C=JP/ST=Tokyo/L=xxx/O=xxx/OU=xxx/CN=127.0.0.1:443/emailAddress=mail@sample.com
Getting Private key
```
成功するとフォルダには３つのファイルが存在しているはずです。

```
pi@raspberrypi ~ $ ls -l
-rw-r--r-- 1 root root  912 Jun 21 18:26 server.crt #証明書
-rw-r--r-- 1 root root  684 Jun 21 18:12 server.csr #証明書要求ファイル(ここまできたら不要)
-rw-r--r-- 1 root root  887 Jun 21 18:08 server.key #秘密鍵
```
盗まれないようパーミッションは変更しておこうね！
`sudo chmod 400 server.*`

###4. Apacheの設定
ApacheのインストールでSSLモジュールが標準でインストールされています。
これを有効化しましょう。
`sudo a2enmod ssl`

その後、作成した証明書などを適用するため下記フォルダに移動します。
`cd /etc/apache2/sites-available/`

フォルダ配下にある「default-ssl.conf」ファイルを編集します。
①要求ファイルのCommon Nameに設定したローカルループバックアドレスを追加
 ServerName 127.0.0.1:443
②証明書と秘密鍵の場所を指定
 SSLCertificateFile /etc/apache2/ssl/server.crt
 SSLCertificateKeyFile /etc/apache2/ssl/server.key

```
     1 <IfModule mod_ssl.c>
      2 <VirtualHost _default_:443>
      3         ServerAdmin webmaster@localhost
      4         ServerName 127.0.0.1:443 #追加
      5         DocumentRoot /var/www
      6         <Directory />
      7                 Options FollowSymLinks
      8                 AllowOverride None
      9         </Directory>
     10         <Directory /var/www/>
     11                 Options Indexes FollowSymLinks MultiViews
     12                 AllowOverride None
     13                 Order allow,deny
     14                 allow from all
     15         </Directory>
     16
     17         ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
     18         <Directory "/usr/lib/cgi-bin">
     19                 AllowOverride None
     20                 Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
     21                 Order allow,deny
     22                 Allow from all
     23         </Directory>
     24
     25         ErrorLog ${APACHE_LOG_DIR}/error.log
     26
     27         # Possible values include: debug, info, notice, warn, error, crit,
     28         # alert, emerg.
     29         LogLevel warn
     30
     31         CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
     32
     33         #   SSL Engine Switch:
     34         #   Enable/Disable SSL for this virtual host.
     35         SSLEngine on
     36
     37         #   A self-signed (snakeoil) certificate can be created by installing
     38         #   the ssl-cert package. See
     39         #   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
     40         #   If both key and certificate are stored in the same file, only the
     41         #   SSLCertificateFile directive is needed.
     42         #SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem   #コメントアウト
     43         #SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key #コメントアウト
     44         SSLCertificateFile /etc/apache2/ssl/server.crt　　　　　　　　　#追加
     45         SSLCertificateKeyFile /etc/apache2/ssl/server.key　　　　　　　#追加
(省略)
```

ここまでできたらいよいよSSLサイトを有効化します。
`sudo a2ensite default-ssl`

Apacheを再起動して出来上がり
`sudo service apache2 restart`

###5. SSLサイトにアクセスしてみよう
https://RaspberryPiに設定されているアドレス
にアクセスすればOK！