読者です 読者をやめる 読者になる 読者になる

DreamerDreamのブログ

夢想家の夢です。

RaspberryPiでオレオレ証明書を発行してSSL通信する。

https://〜で取得されるウェブページはSSL接続といってセキュアな通信が保障されている。

 

httpsプロトコルを利用すると

  1. 認証局から安全なサイトであるという信頼を得ている
  2. 暗号化通信を行うのでハッキングの被害に遭いにくい

ということが保障されて通信される。

 

1.の認証局で認証された証明書を得るためには最低でも3000円/年からの証明書代金を支払う必要があるが、

2.の暗号化通信だけを目的とする場合、自分で証明書を発行してしまうことも可能だ。

この自前の証明書を「オレオレ証明書」と呼ぶらしい。

 

ブラウザでオレオレ証明書のページを読み出した場合「この証明書は信用できません注意して下さい!」という旨のメッセージが出るが暗号化された通信自体は可能だ。

僕は部屋のエアコンを遠隔操作するためにSSL接続をするようにした。

 

方法は

  1. オレオレ証明書の発行
  2. Apacheオレオレ証明書の登録
  3. ApacheSSL通信設定 

 という順番で行う。

 

オレオレ証明書の発行

参考にさせていただいたサイト

Debian 7(Wheezy)でSSL証明書を作成し、Apacheへ設定する - Symfoware

まずopensslがインストールされているか確認

openssl

実行すると

OpenSSL>

となればインストールされている。

OpenSSL>exit

でひとまず終了。

インストールされていなければ

apt-get install openssl

でインストールする。

 

/etc/apache2/ssl ディレクトリに移動(sslディレクトリが無ければ作る)して

秘密鍵を生成

sudo openssl genrsa -des3 -out server.key 1024

を実行

任意のパスの設定と確認の2回入力。

 

このままではApacheが起動する度パスがずっと問われるそうなので

sudo openssl rsa -in server.key -out server.key

で削除する。

 

秘密鍵を利用してサーバー証明書要求書の生成

sudo openssl req -new -days 3650 -key server.key -out server.csr

自分で使う分にはテキトーでいい。

国コード「JP」

地域(県)「Okinawa」

都市(市)「Okazakishi」

組織名「RaspberryServer」

部門名「MyServer」

ドメインアドレス「www.sample.com」

メールアドレス「mail@gmail.com」

 

要求書と秘密鍵を元に証明書を発行

sudo openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650

これで10年間有効な証明書が発行される。

 

sever.csrは証明書要求書

server.keyは秘密鍵

server.crtは証明書

改ざんされないために権限を変更

chmod 400 server.*

 

 

Apacheオレオレ証明書の登録

参考にさせていただいたサイト

ぽこつん研究所 » 自宅サーバー構築メモ(Debian squeeze)#18 ApacheをSSL対応にする(HTTPS)

テンプレがあるのでほぼそのまま使える。

/etc/apache2/sites-availableへ移動

cd /etc/apache2/sites-available

デフォルトのdefaulet-ssl.confをvhost-ssl.confとしてコピーする

cp default-ssl.conf vhost-ssl.conf  

コピーしたvhost-sslを編集

nano vhost-ssl.conf

 

デフォルトでssl-cert-snakeoil.pemとssl-cert-snakeoil.keyが設定されているのでコメントアウトして先ほど証明書を作ったファイルserver.crtとserver.keyを設定して保存。

# A self-signed (snakeoil) certificate can be created by installing
# the ssl-cert package. See
# /usr/share/doc/apache2/README.Debian.gz for more info.
# If both key and certificate are stored in the same file, only the
# SSLCertificateFile directive is needed.
# SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
# SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key

これで先ほど発行した証明書が使えるようになった。

 

 

ApacheSSL通信設定

先ほど設定したサイトを有効化する。

sudo a2ensite vhost-ssl

Apacheを再起動させる。

sudo systemctl restart apache2

 

https://アドレスへ接続してみる。

 

再起動させてSSL通信が出来ない場合、SSLモジュールがインストールされていないもしくはモジュールが有効化されていない可能性がある。

ApacheSSLモジュールをインストールする。

 sudo apt-get install libapache2-mod-ssl

SSLモジュールを有効化する。

sudo a2enmod ssl

 

Apacheを再起動後httpsで繋がるか確認する。