- Ubuntu 26.04 サーバー管理ガイド
- Ubuntu 26.04 update-ca-certificates の基本設定 – 内部 CA 証明書を信頼する
- Ubuntu 26.04 LDAP サーバーの基本設定 – 389 Directory Server でディレクトリ基盤を作る
- Ubuntu 26.04 Nginx の基本設定 – 静的配信とリバースプロキシの土台を作る
- Ubuntu 26.04 Apache リバースプロキシの基本設定 – ProxyPass でバックエンドへ転送する
- Ubuntu 26.04 ログ確認の基本 – journalctl と /var/log を切り分ける
暗号技術入門 第3版 秘密の国のアリス
公開鍵暗号、電子署名、証明書など、TLS や内部 PKI の前提になる暗号技術を確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
Ubuntu 26.04 で内部向け HTTPS、LDAPS、検証用サービスを構成する場合、自己署名証明書や内部 CA 証明書を扱うことがあります。重要なのは、証明書ファイルを置くだけではなく、秘密鍵の権限、SAN、サービス設定、クライアント側の信頼設定、更新期限を合わせて管理することです。
この記事では、自己署名証明書の作成、秘密鍵の配置、証明書内容の確認、サービスからの利用、クライアント側の信頼、期限確認、ログ確認を扱います。
証明書で決めること
- 証明書を使う FQDN と IP アドレス。
- 自己署名証明書か、内部 CA で署名した証明書か。
- 秘密鍵を読めるユーザーとグループ。
- 証明書を使うサービスと reload / restart の方法。
- クライアント側で信頼させる範囲。
- 証明書の有効期限と更新手順。
作業ディレクトリを用意する
証明書作成用の一時ディレクトリを作り、秘密鍵と証明書を分けて扱います。
mkdir -p ~/work/certs
cd ~/work/certs
umask 077
pwdOpenSSL 設定を作成する
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.keyNginx で参照する例
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.serviceApache で参照する例
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_client、curl、対象サービスのログで実際の TLS 接続まで確認すると安全です。
- Ubuntu 26.04 サーバー管理ガイド
- Ubuntu 26.04 update-ca-certificates の基本設定 – 内部 CA 証明書を信頼する
- Ubuntu 26.04 LDAP サーバーの基本設定 – 389 Directory Server でディレクトリ基盤を作る
- Ubuntu 26.04 Nginx の基本設定 – 静的配信とリバースプロキシの土台を作る
- Ubuntu 26.04 Apache リバースプロキシの基本設定 – ProxyPass でバックエンドへ転送する
- Ubuntu 26.04 ログ確認の基本 – journalctl と /var/log を切り分ける

