【Linux】Apacheでオレオレ証明書でSSL通信を実現する !

Linux
この記事は約5分で読めます。

環境

  • OS
cat /etc/os-release | grep -i pretty
> PRETTY_NAME="Ubuntu 20.04.6 LTS"

※特別な記述がない限り、基本的にスーパーユーザー権限(root)での説明となります。

はじめに

この記事では、SSL証明書 の具体的な仕組みについては触れません。
なので、認証局やルート認証局といった登場人物はいませんのでご了承ください。
簡単に Apache2 をインストールしたときにセットでインストールされる snakeoil証明書 を使って
一連の流れを見ていこうという記事になります。

手順

  • apache をインストール
apt update && apt install -y apache2
  • SSL証明書(snakeoil証明書) の存在確認
ls -la /etc/ssl/certs/ssl-cert-snakeoil.pem | wc -l
> 1
ls -la /etc/ssl/private/ssl-cert-snakeoil.key | wc -l
> 1
ケン
ケン

wc -lls -la XXXX の結果行数を表示しているよ。

「1」と表示されたのでファイルがあるということが確認できるね!

※こんな回りくどいやり方しなくてもいいけど、記事に文字数が増える(パーミッションなど)のがイヤだったので、この方法を採用しています。

  • virtualhostの設定をする

Virtualhostの設定

ここの設定がすべてなので、章を分けました!

  • 設定ファイルを開く
vi /etc/apache2/sites-available/oreore.conf
  • 以下を記述する
<IfModule mod_ssl.c> ← apacheモジュールであるsslが有効になっていたらという条件分岐
    <VirtualHost *:443> ← portは443
        ServerName local.oreore.com # ← ドメイン名を指定
        DocumentRoot /home/hogehoge/oreore # ← ドキュメントルートを指定

        SSLEngine on # ← SSLを使いますよ、という指定
        SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem # ← サーバー証明書
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key # ← サーバー秘密鍵

        DirectoryIndex index.html # ← URLでファイル名まで指定されなかったときにデフォルトで見に行くファイル
        <Directory /home/hogehoge/oreore>
            Options -Indexes FollowSymLinks
            AllowOverride None
            Require all granted # ← ここ重要!
        </Directory>

    </VirtualHost>
</IfModule>
  • 設定ファイルチェック
apachectl configtest
> Syntax OK
  • ドキュメントルートとファイル作成
mkdir -p /home/hogehoge/oreore && echo 'oreore' > /home/hogehoge/index.html
  • SSL モジュールが有効になってるか確認
ls -la /etc/apache2/mods-enabled | grep ssl.load | wc -l
> 0
ケン
ケン

1であれば有効になっています!

0であれば次の手順で有効にする!

  • SSL モジュールを有効化
a2enmod ssl
  • さっきの virtualhostファイルを有効化
a2ensite oreore
  • apache 再起動
systemctl restart apache2
  • ホストOSの hostsファイル に追記
IPアドレス local.oreore.com
例えば、
192.168.4.2 local.oreore.com
↑といった感じ
  • ポートスキャンで443ポートが開いているか確認する
nc -vz 192.168.4.3 443
> Connection to 192.168.4.3 443 port [tcp/https] succeeded!
  • ブラウザでアクセスする
https://local.oreore.com
ケン
ケン

最初はもちろん、ユーザーに「この通信保護されていないけど大丈夫か」的な注意を促す文言が表示されますが、これは オレオレ証明書であるが故の無効な証明書を使っているから表示されるものです!なので、「詳細」みたいなボタンから「安全ではないがアクセスする」的なリンクを踏んで突破してください!

おわりに

無事ブラウザで oreore というテキストが表示されましたか?
今回はSSLの仕組みについて触れずに、主に virtualhost の設定に重きを置きました。
また、証明書もインストールしたらセットでインストールされたものを使ったので、
openssl を使って自己署名証明書を作って、当記事と同じことをするといったことは以下記事で紹介しています。

本番環境での certbot の記事も書いているのでぜひ!

コメント