DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

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

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

dreamerdream.hateblo.jp

 

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年間有効な証明書が発行されます。

f:id:DreamerDream:20191230135818p:plain

 

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で繋がるか確認します。

kampa.me