OpenSSLはSSL/TLS証明書のスイスアーミーナイフです。このサイトの他のすべての記事でOpenSSLコマンドを参照しています — このページではそれらすべてを1か所にまとめます。
証明書の確認
証明書の詳細を表示(リモートサーバー)
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -text
有効期限の確認
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate
サブジェクトとSANの確認
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -subject -ext subjectAltName
発行者(どの認証局か)の確認
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -issuer
ローカル証明書ファイルの確認
openssl x509 -in cert.pem -noout -text
openssl x509 -in cert.pem -noout -dates # 日付のみ
openssl x509 -in cert.pem -noout -subject # サブジェクトのみ
openssl x509 -in cert.pem -noout -ext subjectAltName # SANのみ
証明書チェーンの検証
チェーンの完全性を確認(リモート)
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null
# 確認ポイント:
# Verify return code: 0 (ok) ← チェーンが完全
# Verify return code: 21 (unable to verify) ← チェーンが不完全
チェーンファイルに対して証明書を検証
openssl verify -CAfile chain.pem cert.pem
# 期待値: cert.pem: OK
証明書と鍵の一致を確認
# これら2つのハッシュが同一でなければなりません
openssl x509 -noout -modulus -in cert.pem | openssl md5
openssl rsa -noout -modulus -in privkey.pem | openssl md5
# ECDSA鍵の場合:
openssl ec -in privkey.pem -pubout 2>/dev/null | openssl md5
openssl x509 -in cert.pem -pubkey -noout | openssl md5
鍵の生成
ECDSA P-256(推奨)
openssl ecparam -genkey -name prime256v1 -noout -out privkey.pem
RSA 2048
openssl genrsa -out privkey.pem 2048
RSA 4096
openssl genrsa -out privkey.pem 4096
CSRの生成
ECDSA
openssl req -new -key privkey.pem -out csr.pem -subj "/CN=example.com"
SANあり(マルチドメイン)
openssl req -new -key privkey.pem -out csr.pem \
-subj "/CN=example.com" \
-addext "subjectAltName=DNS:example.com,DNS:www.example.com"
CSRの検査
openssl req -in csr.pem -noout -text
フォーマット間の変換
PEM → PFX(Windows/IIS向け)
openssl pkcs12 -export -out cert.pfx -inkey privkey.pem -in cert.pem -certfile chain.pem
PFX → PEM
openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem
openssl pkcs12 -in cert.pfx -nocerts -nodes -out privkey.pem
openssl pkcs12 -in cert.pfx -cacerts -nokeys -out chain.pem
PEM → DER
openssl x509 -in cert.pem -outform DER -out cert.der
DER → PEM
openssl x509 -in cert.der -inform DER -outform PEM -out cert.pem
TLS接続のデバッグ
ネゴシエートされたTLSバージョンのテスト
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | grep "Protocol"
特定のTLSバージョンのテスト
# Test TLS 1.2
echo | openssl s_client -connect example.com:443 -servername example.com -tls1_2 2>/dev/null | grep "Protocol"
# Test TLS 1.3
echo | openssl s_client -connect example.com:443 -servername example.com -tls1_3 2>/dev/null | grep "Protocol"
完全なハンドシェイクの表示
openssl s_client -connect example.com:443 -servername example.com -msg
サポートされる暗号スイートの確認
# サーバーが受け入れるすべての暗号をリスト
nmap --script ssl-enum-ciphers -p 443 example.com
自己署名証明書の生成(開発用のみ)
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout key.pem -out cert.pem -days 365 -nodes \
-subj "/CN=localhost" \
-addext "subjectAltName=DNS:localhost,IP:127.0.0.1"
信頼されたlocalhost HTTPSには、代わりにmkcertを使用してください。
別々のファイルからfullchain.pemを作成
cat cert.pem chain.pem > fullchain.pem
順序が重要です:あなたの証明書が最初、次に中間証明書です。
よくある質問
OpenSSLのインストール方法は?
ほとんどのLinuxディストリビューションに含まれています。macOS:brew install openssl。Windows:Git for Windows(OpenSSL含む)かChocolatey(choco install openssl)でインストール。
openssl x509とopenssl s_clientの違いは?
x509はローカルの証明書ファイルを読みます。s_clientはリモートサーバーに接続して証明書を取得します。ライブサーバーの確認にはs_clientを使用し、ディスク上のファイルの検査にはx509を使用してください。
コマンドが「unable to load certificate」と表示される理由
ファイルがPEM(テキスト)ではなくDERエンコード(バイナリ)の可能性があります。コマンドに-inform DERを追加してください:
openssl x509 -in cert.der -inform DER -noout -text