手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 自己署名証明書の配置 – 証明書と秘密鍵を安全に管理する

関連する記事

Ubuntu 26.04 で内部向け HTTPS、LDAPS、検証用サービスを構成する場合、自己署名証明書や内部 CA 証明書を扱うことがあります。重要なのは、証明書ファイルを置くだけではなく、秘密鍵の権限、SAN、サービス設定、クライアント側の信頼設定、更新期限を合わせて管理することです。

この記事では、自己署名証明書の作成、秘密鍵の配置、証明書内容の確認、サービスからの利用、クライアント側の信頼、期限確認、ログ確認を扱います。

証明書で決めること

  • 証明書を使う FQDN と IP アドレス。
  • 自己署名証明書か、内部 CA で署名した証明書か。
  • 秘密鍵を読めるユーザーとグループ。
  • 証明書を使うサービスと reload / restart の方法。
  • クライアント側で信頼させる範囲。
  • 証明書の有効期限と更新手順。

作業ディレクトリを用意する

証明書作成用の一時ディレクトリを作り、秘密鍵と証明書を分けて扱います。

mkdir -p ~/work/certs
cd ~/work/certs
umask 077
pwd

OpenSSL 設定を作成する

SAN を含めた証明書を作成するため、OpenSSL 設定をファイルとして作成します。CN だけではなく subjectAltName を設定します。

tee server-openssl.cnf >/dev/null <<'EOF'
[req]
default_bits = 4096
prompt = no
default_md = sha256
distinguished_name = dn
x509_extensions = v3_req
[dn]
CN = server.example.com
[v3_req]
subjectAltName = @alt_names
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
[alt_names]
DNS.1 = server.example.com
DNS.2 = server
IP.1 = 192.0.2.10
EOF
chmod 0600 server-openssl.cnf

自己署名証明書を作成する

検証用または内部用途の自己署名証明書を作成します。本番用途では内部 CA または正式な CA による発行を検討します。

openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout server.example.com.key -out server.example.com.crt -config server-openssl.cnf
chmod 0600 server.example.com.key
chmod 0644 server.example.com.crt
openssl x509 -in server.example.com.crt -noout -subject -issuer -dates

証明書内容を確認する

SAN、用途、有効期限、fingerprint を確認します。

openssl x509 -in server.example.com.crt -noout -text | grep -A8 'Subject Alternative Name'
openssl x509 -in server.example.com.crt -noout -text | grep -A4 'Key Usage'
openssl x509 -in server.example.com.crt -noout -fingerprint -sha256

証明書と秘密鍵を配置する

サービスから読む場所へ証明書と秘密鍵を配置します。秘密鍵は root 所有の 0600 を基本にし、サービスの要件に合わせてグループ権限を調整します。

sudo install -d -o root -g root -m 0755 /etc/ssl/localcerts
sudo install -d -o root -g root -m 0700 /etc/ssl/private/local
sudo install -o root -g root -m 0644 server.example.com.crt /etc/ssl/localcerts/server.example.com.crt
sudo install -o root -g root -m 0600 server.example.com.key /etc/ssl/private/local/server.example.com.key
sudo ls -l /etc/ssl/localcerts/server.example.com.crt
sudo ls -l /etc/ssl/private/local/server.example.com.key

Nginx で参照する例

Nginx から証明書を参照する場合は、対象 server block で証明書と秘密鍵のパスを指定します。

sudo tee /etc/nginx/snippets/server-example-tls.conf >/dev/null <<'EOF'
ssl_certificate /etc/ssl/localcerts/server.example.com.crt;
ssl_certificate_key /etc/ssl/private/local/server.example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
EOF
sudo nginx -t
sudo systemctl reload nginx.service

Apache で参照する例

Apache から証明書を参照する場合は、TLS 用 virtual host で証明書と秘密鍵のパスを指定します。

sudo a2enmod ssl
sudo tee /etc/apache2/conf-available/server-example-tls.conf >/dev/null <<'EOF'
SSLCertificateFile /etc/ssl/localcerts/server.example.com.crt
SSLCertificateKeyFile /etc/ssl/private/local/server.example.com.key
EOF
sudo a2enconf server-example-tls
sudo apache2ctl configtest
sudo systemctl reload apache2.service

クライアント側で信頼する

自己署名証明書をクライアント側で信頼させる場合は、証明書を CA として登録します。内部 CA で署名した構成では、サーバー証明書ではなく CA 証明書を登録します。

sudo install -o root -g root -m 0644 server.example.com.crt /usr/local/share/ca-certificates/server-example-selfsigned.crt
sudo update-ca-certificates
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt /usr/local/share/ca-certificates/server-example-selfsigned.crt

接続を確認する

サービス側の設定、証明書名、SAN、クライアント側の信頼を確認します。

openssl s_client -connect server.example.com:443 -servername server.example.com -verify_return_error
curl -I https://server.example.com/
openssl s_client -connect server.example.com:636 -servername server.example.com -verify_return_error

期限を確認する

自己署名証明書は更新忘れが起きやすいため、有効期限を定期的に確認します。

openssl x509 -in /etc/ssl/localcerts/server.example.com.crt -noout -dates
openssl x509 -checkend 2592000 -noout -in /etc/ssl/localcerts/server.example.com.crt
date -u

ログを確認する

証明書のパス、秘密鍵の権限、SAN 不一致、CA 信頼不足はログに出ます。対象サービスのログを確認します。

journalctl -u nginx.service -b --no-pager
journalctl -u apache2.service -b --no-pager
journalctl -u dirsrv@main.service -b --no-pager

確認項目

  • 証明書に SAN が含まれているか。
  • 秘密鍵が 0600 など必要最小限の権限か。
  • サービス設定で証明書と秘密鍵のパスが正しいか。
  • 設定変更後に構文確認と reload を行っているか。
  • クライアント側で証明書を信頼できるか。
  • 有効期限と更新手順を確認しているか。

まとめ

Ubuntu 26.04 で自己署名証明書を使う場合は、証明書作成、秘密鍵の権限、サービス設定、クライアント側の信頼、期限確認をまとめて扱います。証明書を配置しただけで終わらせず、openssl s_clientcurl、対象サービスのログで実際の TLS 接続まで確認すると安全です。

関連する記事
Ubuntu 26.04 自己署名証明書の配置 – 証明書と秘密鍵を安全に管理する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る