25
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

成功するとフォルダには3つのファイルが存在しているはずです。

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!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
25
Help us understand the problem. What are the problem?