🔐
3行で怒られないオレオレ証明書を作る
はじめに
前回の記事(下記リンク)の短縮版です。今回は「ルート認証局」「中間認証局」「サーバー証明書」を、それぞれワンライナーで作ります。
開発環境
- Windows 11
- WSL 2.4.12.0
- Ubuntu 24.04.2
- OpenSSL 3.0.13
証明書の作成
適当な作業ディレクトリを作成して、その中へ移動します。
mkdir ~/ssl && cd $_
各証明書を作成します。ザッツ・オール。
openssl req -x509 -days 365 -noenc -keyout rca.key -out rca.crt -subj "/CN=Localhost RCA"
openssl req -x509 -days 365 -noenc -keyout ica.key -out ica.crt -subj "/CN=Localhost ICA" -CA rca.crt -CAkey rca.key
openssl req -x509 -days 365 -noenc -keyout server.key -out server.crt -subj "/CN=Localhost Server" -CA ica.crt -CAkey ica.key -addext "subjectAltName=DNS:*.test.localhost"
解説すると次のようになります。
-
req
: CSR(証明書署名要求)を作成するコマンド。 -
-x509
: CSRを作成せずにCRT(自己著名証明書)を作成するオプション。 -
-days
: 証明書の有効日数を指定するオプション。今回は自己署名なので1年に指定。 -
-noenc
: 秘密鍵を暗号化せずに作成するオプション。以前は-nodes
だった。 -
-keyout
: 秘密鍵のファイル名を指定するオプション。 -
-out
: 証明書のファイル名を指定するオプション。 -
-subj
: CN(コモンネーム)などを指定するオプション。 -
-CA
: 認証局の証明書を指定するオプション。 -
-CAkey
: 認証局の秘密鍵を指定するオプション。 -
-addext
: 拡張属性を追加するオプション。今回はSANの指定に使用。
動作確認
ルート認証局と中間認証局の証明書をWindowsにインストールします。
-
~/ssl/rca.crt
→ 現在のユーザー → 信頼されたルート証明機関 -
~/ssl/ica.crt
→ 現在のユーザー → 中間証明機関
サーバー証明書を配置します。
sudo cp ./server.crt /etc/ssl/certs/server.crt
sudo cp ./server.key /etc/ssl/private/server.key
Apache2をインストールします。
sudo apt update
sudo apt upgrade -y
sudo apt install -y apache2
バーチャルホストの設定ファイルを作成します。
cat << EOF | sudo tee /etc/apache2/sites-available/vhost.conf > null
<VirtualHost *:80>
ServerName test.localhost
ServerAlias *.test.localhost
VirtualDocumentRoot "/var/www/%1"
</VirtualHost>
<VirtualHost *:443>
ServerName test.localhost
ServerAlias *.test.localhost
VirtualDocumentRoot "/var/www/%1"
SSLEngine on
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
</VirtualHost>
<Directory "/var/www/*">
AllowOverride All
Require all granted
Options FollowSymLinks
</Directory>
EOF
Apacheのバーチャルホスト、モジュール、自動起動を有効化します。
sudo a2ensite vhost
sudo a2enmod ssl vhost_alias
sudo systemctl enable apache2
下記ページをSSLで表示できれば成功です。
シンボリックリンクでWindows上のサイトデータも動作確認できます。
sudo ln -s /mnt/c/{path} /var/www/{name}
参考リンク
Discussion