ページ更新日:2026/05/12
OpenSSLは、SSL/TLS通信や証明書管理に使うオープンソースの暗号ライブラリおよびコマンドラインツールです。
Webサーバーの設定、CSR(証明書署名要求)の作成、証明書の確認・変換、TLS接続のデバッグなど、SSL証明書を扱うエンジニアにとって必須のツールです。
本ページでは、OpenSSLの概要からインストール方法、実務でよく使うコマンドまでを体系的に解説します。
OpenSSLは、TLS(Transport Layer Security)・SSL(Secure Sockets Layer)プロトコルと、様々な暗号アルゴリズムを実装したオープンソースのライブラリです。
1998年に SSLeay をベースに開発が始まり、現在はほぼすべての Linux ディストリビューションと macOS に標準搭載されています。
| 項目 | 内容 |
| ライセンス | Apache License 2.0(OpenSSL 3.x以降) |
| 主な用途 | CSR/秘密鍵の生成、証明書の確認・変換、TLS接続テスト、暗号化・復号化 |
| 対応OS | Linux、macOS(標準搭載)、Windows(公式バイナリまたはWSL) |
| 最新安定版 | OpenSSL 3.5(LTS・推奨)/ 4.0(2026年4月リリース)/ 1.1.1系はサポート終了(2023年9月) |
OpenSSL は長年にわたってメジャーアップデートが行われており、バージョンによって動作やオプションが異なります。
特に 1.x 系から 3.x 系への移行では非互換な変更が多く、既存スクリプトの修正が必要になる場合があります。
| バージョン | リリース/EOL | 主な変更点・特記事項 |
| 1.0.2 | EOL: 2019-12 | 旧来の標準。現在は非推奨。TLS 1.3 非対応。 |
| 1.1.1 | EOL: 2023-09 | TLS 1.3 対応を追加。長期サポート版。EOL済みのためアップグレード推奨。 |
| 3.0 | LTS: 2026-09まで | ライセンスが Apache 2.0 に変更。Provider アーキテクチャ導入。多くの API が非推奨化。 |
| 3.1 / 3.2 | EOL済み | 3.2 で QUIC API 追加(HTTP/3 対応ライブラリ向け)。 |
| 3.3 / 3.4 | 3.4: 2026-10-22 まで | 3.3 は EOL 済み。3.4 は 2026年10月22日までサポート継続。 |
| 3.5 | LTS: 2030-04-08 まで | 現在の推奨バージョン。 2025年4月8日リリース。長期サポート(LTS)。安定運用環境に最適。 |
| 4.0 | 2027-04 まで | 2026年4月リリース。新しい API デザインを採用。本番導入は 3.5 LTS が安全。 |
-legacy が必要なことがある:OpenSSL 1.x で作成した古い PFX ファイルを 3.x で扱う場合、openssl pkcs12 -in old.pfx -legacy ... が必要です。openssl version openssl version -a # 詳細情報(ビルドオプション含む)
| OS | コマンド・方法 |
| Ubuntu / Debian | sudo apt-get install openssl |
| RHEL / CentOS / Rocky | sudo yum install openssl または sudo dnf install openssl |
| macOS | 標準搭載(LibreSSL互換)。最新版は brew install openssl |
| Windows | WSL(Windows Subsystem for Linux)を使うか、Win32/Win64 OpenSSL をインストール |
※ macOS の標準 OpenSSL は LibreSSL ベースのため、一部オプションの挙動が異なります。Homebrew 版の openssl を使う場合はパスに注意してください(/opt/homebrew/opt/openssl/bin/openssl 等)。
SSL証明書の申し込みには CSR(Certificate Signing Request:証明書署名要求)が必要です。
OpenSSL で秘密鍵と CSR を同時に生成するのが最も一般的な方法です。
openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr
-nodes:秘密鍵にパスフレーズを設定しない(サーバー起動時のパスワード入力を省略)server.key:秘密鍵ファイル(外部に漏らさず厳重に保管)server.csr:CSRファイル(認証局への申し込みに使用)www.example.com)を入力openssl req -new -newkey rsa:4096 -nodes -keyout server.key -out server.csr
openssl req -new -key server.key -out server.csr
openssl req -text -noout -in server.csr
RSA と並んで近年普及しているのが ECDSA(楕円曲線デジタル署名アルゴリズム)です。
RSA 2048bit と同等以上のセキュリティを、より短い鍵長で実現できるため、TLS ハンドシェイクの高速化やサーバー負荷軽減に効果的です。
| 種類 | 鍵長 | セキュリティ強度・用途 |
| RSA | 2048bit / 4096bit | 最も広く使われる。互換性が高い。古いシステムでも動作。 |
| ECDSA P-256 | 256bit | RSA 3072bit 相当のセキュリティ。高速・軽量。モダンブラウザ/サーバーで広くサポート。 |
| ECDSA P-384 | 384bit | RSA 7680bit 相当。より高いセキュリティが必要な場合(政府・金融等)。 |
openssl ecparam -genkey -name prime256v1 -noout -out ec.key
openssl ecparam -genkey -name secp384r1 -noout -out ec384.key
openssl req -new -key ec.key -out ec.csr
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 -nodes -keyout ec.key -out ec.csr
※ DigiCert(当社取扱いの RapidSSL・GeoTrust・Thawte 等)は ECDSA 証明書の発行に対応しています。
※ 古いWebサーバーや一部のロードバランサーでは ECDSA 非対応の場合があります。導入前に動作環境を確認してください。
openssl x509 -text -noout -in server.crt
openssl x509 -enddate -noout -in server.crt
echo | openssl s_client -connect www.example.com:443 -servername www.example.com 2>/dev/null | openssl x509 -enddate -noout
※ -servername は SNI(複数ドメインを同一 IP で運用している環境)で正しい証明書を取得するために必要です。
openssl s_client -connect www.example.com:443 -servername www.example.com -showcerts 2>/dev/null
openssl s_client は TLS 接続をデバッグするための強力なツールです。
サーバーの TLS バージョン・暗号スイート・証明書チェーンを確認できます。
openssl s_client -connect www.example.com:443 -servername www.example.com
SNI 対応サーバーでは -servername を省くとデフォルト証明書(別ドメインの可能性あり)が返されることがあります。必ず付けることを推奨します。
# TLS 1.3 のみ許可するか確認 openssl s_client -connect www.example.com:443 -servername www.example.com -tls1_3 # TLS 1.2 で接続 openssl s_client -connect www.example.com:443 -servername www.example.com -tls1_2
openssl s_client -connect www.example.com:443 -servername www.example.com -status 2>/dev/null | grep "OCSP"
openssl s_client -connect 203.0.113.1:443 -servername www.example.com
複数ドメインを1つの IP で運用(SNI)している環境で特定ドメインの証明書を確認する場合に使用します。
IIS や Azure などでは PFX(.pfx / .p12)形式の証明書が必要です。OpenSSL で変換できます。
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt -certfile intermediate.crt
# 証明書を取り出す openssl pkcs12 -in server.pfx -nokeys -out server.crt # 秘密鍵を取り出す openssl pkcs12 -in server.pfx -nocerts -nodes -out server.key
OpenSSL 3.x では -legacy オプションが必要な場合があります(古い PFX ファイルを扱う場合)。
サーバーにインストールする際、秘密鍵と証明書が対応しているかを事前確認することで、設定ミスを防げます。
# 秘密鍵の MD5 openssl rsa -modulus -noout -in server.key | openssl md5 # CSR の MD5 openssl req -modulus -noout -in server.csr | openssl md5 # 証明書の MD5 openssl x509 -modulus -noout -in server.crt | openssl md5
3つのハッシュ値が一致していれば、秘密鍵・CSR・証明書はセットです。一致しない場合は異なる秘密鍵で生成された証明書です。
インストール前に証明書・中間CA証明書・秘密鍵が正しくそろっているか、openssl verify で確認できます。
# 中間証明書 + ルート証明書を1ファイルにまとめた bundle で検証 openssl verify -CAfile bundle.pem server.crt
出力が server.crt: OK であれば証明書チェーンは正常です。
openssl verify -CAfile root.crt -untrusted intermediate.crt server.crt
# サーバー証明書(先頭の1枚)の Subject と Issuer を表示 openssl s_client -connect www.example.com:443 -servername www.example.com 2>/dev/null | \ openssl x509 -noout -subject -issuer
※ パイプ後の openssl x509 は先頭の証明書(サーバー証明書)だけを処理します。
チェーン全体(中間証明書含む)を確認するには -showcerts オプションで出力された PEM ブロックを個別に処理してください。
# OCSP URL を証明書から取得 OCSP_URL=$(openssl x509 -noout -ocsp_uri -in server.crt) # OCSP 応答で失効確認 openssl ocsp -issuer intermediate.crt -cert server.crt -url "$OCSP_URL" -resp_text
出力に good と表示されれば失効していません。revoked の場合は失効済みです。
| コマンド・オプション | 用途 |
openssl version |
インストール済みの OpenSSL バージョン確認 |
openssl req -new ... |
CSR・秘密鍵の生成 |
openssl x509 -text -noout |
証明書の内容・有効期限確認 |
openssl s_client -connect |
サーバーへの TLS 接続テスト・証明書チェーン確認 |
openssl pkcs12 -export |
PFX(PKCS#12)ファイルへの変換 |
openssl rsa -modulus | openssl md5 |
秘密鍵と証明書の照合 |
openssl x509 -enddate -noout |
証明書の有効期限のみ表示 |
関連ページ:
OpenSSLコマンド集(CSR生成・証明書確認・有効期限チェック一覧)
OpenSSLでCSR作成(手順詳細)
opensslでpfxファイル作成(IIS向け)
CSR(証明書署名要求)とは?
NginxのHSTSとTLS設定強化(SSL Labs A+)