自己署名証明書(Self-Signed Certificate)とは自分で作成するSSL証明書で、認証局(CA)を通さず発行者自身が自分で署名したデジタル証明書。
主に内部ネットワークや開発・テスト環境での使用に適している。
今回は自己署名証明書を作成するための設定ファイルを使った方法でラズパイ(Raspberry Pi)に実装してみた。
■大まかな手順
構築の大まかな手順は
❶作業フォルダーの作成
❷設定ファイルの作成
❸自己署名証明書の作成
❹Apacheへの組み込み
❺ブラウザ端末に証明書をインポート
❻動作検証(ブラウザからアクセス)
❼作業フォルダーの削除
■用意したラズパイ
Raspberry Pi 5 8GB
・OS:Debian GNU/Linux 12 (bookworm)
・WEBサーバー:Apache 2.4.65
・証明書作成ツール:OpenSSL 3.0.18 30 Sep 2025
・ホスト名:blackberry5a
・IPアドレス:192.168.0.205(固定)
■作業の詳細
作業はラズパイのTerminalから行う。
"user"アカウントで作業すべきだが今回はSSH接続したターミナルから"root"アカウントでログインして行った。
❶作業フォルダーの作成
先ずは作業用フォルダー「work」を作成する。
mkdir work
cd work
❷設定ファイルの作成
次に自己署名証明書を作成するための設定を記述したファイルをworkフォルダーに作成する。
1つの証明書でホスト名とIPアドレスの両方に対応させるためのフィールドSAN(Subject Alternative Name)付きのものを用意することにした。
下記の内容でファイルを作成する。青文字が環境によって修正が必要な個所。
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_ca
prompt = no
[req_distinguished_name]
C = Country(国)
ST = State/Province(都道府県)
L = Locality(市区町村)
O = Organization(組織名)
CN = Common Name(ドメイン)
[req_ext]
subjectAltName = @alt_names
[v3_ca]
subjectAltName = @alt_names
basicConstraints = critical, CA:TRUE
[alt_names]
DNS.1 = ホスト名
IP.1 = IPアドレス
実際に作成した設定ファイル「self_signed.cnf」がこちら。
self_signed.cnf の内容を表示
[req]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_ca
prompt = no
[req_distinguished_name]
C = JP
ST = Kanagawa
L = Yokohama
O = MyOrg
CN = blackberry5a
[req_ext]
subjectAltName = @alt_names
[v3_ca]
subjectAltName = @alt_names
basicConstraints = critical, CA:TRUE
[alt_names]
DNS.1 = blackberry5a
IP.1 = 192.168.0.205
❸自己署名証明書の作成
作成した設定ファイル「self_signed.cnf」を使って "openssl"コマンドで自己署名証明書を作成する。
OpenSSLがインストールされていなければ "apt"コマンドでインストールする。
apt install openssl
証明書の有効期限は10年とした。
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout self_signed.key -out self_signed.crt -config self_signed.cnf
成功するとworkフォルダーには 「self_signed.key」と「self_signed.crt」の2つのファイルが生成される。
・self_signed.key:秘密鍵
・self_signed.crt:証明書
❹Apacheへの組み込み
(1)生成された証明書と秘密鍵のファイルを配置
mv self_signed.crt /etc/ssl/certs/
mv self_signed.key /etc/ssl/private/
chmod 600 /etc/ssl/private/self_signed.key
(2)SSLモジュールを有効化・SSLサイトを有効化
a2enmod ssl
a2ensite default-ssl
systemctl reload apache2
(3)SSL設定ファイルの編集
テキストエディタ(nano)で/etc/apache2/sites-available/default-ssl.conf を開き
内容を確認して修正する。
nano /etc/apache2/sites-available/default-ssl.conf
# Enable/Disable SSL for this virtual host.
SSLEngine on ←確認
# 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/ssl/certs/self_signed.crt ←追加
SSLCertificateKeyFile /etc/ssl/private/self_signed.key ←追加
(4)Apacheを再起動
systemctl restart apache2
❺ブラウザ端末に証明書をインポート
●Windowsの場合
(1)self_signed.crt をWindowsにコピー
(2)Windowsで self_signed.crt ファイルをダブルクリック
(3)「証明書のインストール」をクリック
(4)「ローカル コンピューター」を選択
(5)「証明書ストアを次のストアに配置する」を選択し、「参照」をクリック
(6)「信頼されたルート証明機関」を選択
(7)「次へ」をクリック
(8)「完了」をクリック
(9)インポートウィザード完了
(10)「OK」をクリックしてインポート終了
(11)ブラウザを起動していたら再起動する
●Androidの場合
(1)作成した証明書ファイル self_signed.crt をスマホに転送(メール添付やUSB接続など)
(2)スマホの設定 → 「セキュリティ」 → 「暗号化と資格情報」 → 「ストレージから証明書をインストール」
(3)ファイルマネージャーから証明書を選択しインストール
(4)証明書名を指定し完了
※ Androidバージョンによって若干操作が異なります。
●iOSの場合
(1)証明書ファイル self_signed.crt をメールなどでiPhoneに送る
(2)メールアプリやSafariで証明書を開くと「プロファイルがダウンロードされました」と表示される
(3)「設定」アプリ → 「一般」→ 「プロファイル」→ 該当証明書をタップしてインストール
(4)「設定」→「一般」→「情報」→「証明書信頼設定」から該当証明書のフル信頼をONにする
※ iOSバージョンによって若干操作が異なります。
❻動作検証
ブラウザのURLにホスト名もしくはIPアドレスを指定、正しく表示されることを確認する。
https://blackberry5a
https://192.168.0.205
「http://blackberry5a」の画面
「https://blackberry5a」の画面
"証明書ビューア:blackberry5a"の画面
❼作業フォルダーの削除
作業用フォルダー「work」を削除する。
cd ..
rm -r work
■あとがき
同様な方法でLinuxPCのUbuntuやDebianでも実装できると思う。