🔐

3行で怒られないオレオレ証明書を作る

に公開

はじめに

前回の記事(下記リンク)の短縮版です。今回は「ルート認証局」「中間認証局」「サーバー証明書」を、それぞれワンライナーで作ります。

https://zenn.dev/umishirazu/articles/82acc01e8924ac

開発環境

  • 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で表示できれば成功です。

https://html.test.localhost/

シンボリックリンクでWindows上のサイトデータも動作確認できます。

sudo ln -s /mnt/c/{path} /var/www/{name}

https://name.test.localhost/

参考リンク

https://docs.openssl.org/

Discussion