用語辞典11分で読める

OpenSSLとは:HTTPSの暗号化を担うライブラリと、その守り方

OpenSSLは、HTTPS(TLS)と暗号処理を担うオープンソースのライブラリです。多くのサーバーが知らないうちに使っており、1つの脆弱性が世界中に波及します。影響範囲が大きい理由と、更新の守り方を解説します。

本文を読む
公開日
更新日
目次

HTTPS で通信しているなら、あなたのサーバーはほぼ確実に OpenSSL(か、その互換実装)の上で動いています。直接は触らないのに、脆弱性が見つかると多くのサーバーが影響を受けます。このライブラリが何をしているかと守り方を、防御目線で解説します。

どこで使われているか

OpenSSL の難しさは、自分で選んだ覚えがないのに使っていることにあります。あなたのアプリは Web サーバーに TLS を任せ、Web サーバーは OpenSSL に暗号処理を任せ、その OpenSSL は OS が配っている、という入れ子構造になっています。

あなたのアプリ
↓ TLSを委譲
Web サーバー(Nginx / Apache)・言語ランタイム
↓ 暗号処理を委譲
OpenSSL(OSが配布)
OpenSSL は最下層のライブラリ。上のどの層も、暗号処理をここに任せている。だから1つの脆弱性が全体に影響する。

この構造は普段は便利で、暗号は専門家が書いた共通の実装に任せられます。ですが、その共通のライブラリに脆弱性が見つかると、それを使う全員が同時に影響を受けます。基盤ライブラリの脆弱性は影響範囲が広い、というのはこの意味です。

OpenSSL・SSL/TLS・証明書の違い

名前が似ているので混同されがちですが、役割はそれぞれ違います。

用語何か例
SSL / TLS通信を暗号化するための約束事(プロトコル)。SSL は古い版で、今使うのは TLS 1.2 / 1.3HTTPS は HTTP を TLS で包んだもの
OpenSSLTLS や暗号の計算を実際に行うプログラム(ライブラリ)と、付属のコマンドNginx や Apache が内部で呼び出す
証明書「このドメインの持ち主である」ことを認証局が保証するデータ。公開鍵を含むLet's Encrypt が無料で発行する

つまり OpenSSL は TLS という約束事を実装した道具の1つで、証明書はその道具が通信のときに使うデータです。TLS を実装したライブラリはほかにもあり(LibreSSL、BoringSSL、Windows の Schannel など)、どれを使うかは OS やソフトによって決まります。

なぜ影響が大きいのか:1つの不具合が多くのサーバーの鍵に影響した例

2014年の Heartbleed(CVE-2014-0160)は、OpenSSL の小さな実装ミス(要求された長さを検証せずに信用した)が原因で、サーバーのメモリ(秘密鍵やセッション情報を含みうる領域)を外部から少しずつ読み出せてしまうものでした。OpenSSL が広く使われていたからこそ、世界中の膨大なサーバーが一斉に対象になりました(詳しくは → Heartbleed 事件)。

教訓は明快です。下の層で使われる依存ほど、影響範囲は広い。だから、アプリが直接 import している依存だけでなく、その下で動く OpenSSL のような基盤ライブラリも、同じ真剣さで監視・更新の対象に入れる必要があります。

守り方:EOL を避け、基盤ライブラリも監視する

1

自分の環境の OpenSSL を把握する

何が、どのバージョンを使っているかを知らなければ守れません。サーバー・コンテナのベースイメージ・言語ランタイムが、それぞれどの OpenSSL(系列・バージョン)に依存しているかを棚卸しします。

2

サポート終了(EOL)版を使わない

古い系列はサポートが終わると、新しい脆弱性が見つかっても修正が出ません。EOL のまま動かし続けると、脆弱性が見つかっても直らない状態が続きます。サポート中の系列へ計画的に上げます。

3

基盤ライブラリも CVE 監視に含める

アプリの依存は osv-scanner などで追えますが、OS が配る OpenSSL のような基盤は見落としがち。基盤ライブラリの新規 CVE も拾える体制にします(→ CVE対応の実務)。

4

重大時は速やかに更新する

Heartbleed 級の重大脆弱性は、公表と同時に攻撃が始まります。基盤ライブラリの更新は「次の定期更新で」ではなく、影響度に応じて即日対応できるよう、更新手順を普段から軽くしておきます。

サポート中のバージョン(2026年10月時点)

OpenSSL プロジェクトは、長期サポート版(LTS)を奇数年の4月に出し、少なくとも5年間サポートします。LTS でない版のサポートは、3.5 より後に出たものはリリースから13か月です。

系列種類サポート終了日
4.0通常版2027年5月14日
3.6通常版2026年11月1日
3.5LTS2030年4月8日
3.4通常版2026年10月22日
3.0 / 1.1.1 / 1.0.2—終了済み(OpenSSL 社による有償の延長サポートのみ)

ただし、OS が配る OpenSSL は事情が違います。Red Hat 系をはじめ多くの Linux ディストリビューションは、バージョン番号を上げずに修正だけを取り込む(バックポートする)運用をしています。たとえば OS のサポート期間中は、表示が 3.0 のままでも OS の提供元が修正を出し続けることがあります。番号だけで「古いから危ない」「新しいから安全」と判断せず、OS の提供元のセキュリティ情報で確認します。

自分の環境で確認する方法

1

OS の OpenSSL を確認する

openssl version -a でバージョンを確認します。パッケージとしての版は Debian/Ubuntu なら dpkg -l 'libssl*' openssl、Red Hat 系なら rpm -q openssl で見られます。修正済みかどうかは、この版を OS 提供元のセキュリティ情報と照らし合わせます。
2

アプリが実際に使っている OpenSSL を確認する

OS とは別の OpenSSL を同梱しているソフトがあります。Nginx は nginx -V、Python は python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"、Node.js は node -p process.versions.openssl で、組み込まれている版が分かります。
3

コンテナのイメージも確認する

コンテナの中の OpenSSL は、ホストの OS を更新しても変わりません。ベースイメージを定期的に作り直し、イメージ単位で脆弱性を検査します。
4

OpenSSL のセキュリティ告知を受け取る

重大な修正を含むリリースは、約1週間前に openssl-announce メーリングリストで日付と重大度だけが予告されます。予告を受け取れば、更新の作業時間を前もって確保できます。

脆弱性の重大度の見方

OpenSSL プロジェクトは、自分たちの脆弱性を4段階で評価し、それに応じて修正の出し方を変えています。

重大度目安修正の出し方
Critical(重大)よくある設定で、簡単に悪用できる(サーバーのメモリの大量の漏えい、秘密鍵の奪取など)すべてのサポート中の版で、すぐに修正版を出す
High(高)Critical ほどではないが、影響が大きい(あまり使わない設定、クライアント側だけなど)非公開で準備し、すべてのサポート中の版で修正版を出す
Moderate(中)サービス停止にとどまる、珍しいプロトコルだけ、など次の定期リリースでまとめて修正
Low(低)コマンドラインツールだけ、条件がそろいにくい、など次の定期リリースでまとめて修正

Heartbleed のように「サーバーのメモリが外から読める」種類の不具合は、Critical の定義に当たります。Critical と High は、予告を見た時点で更新の準備を始めるのが目安です。

当サイトの視点:基盤ライブラリこそ機械で監視する

基盤ライブラリの脆弱性は、人間の「なんとなくの記憶」では追いきれません。当サイトは自分自身の依存・基盤も CVE の機械監視の対象にしています。あなたが Let's Encrypt で配っている証明書も、その通信の下では OpenSSL 系の実装が暗号処理をしています。普段は意識しない基盤ライブラリを一覧にして監視することが、影響範囲の大きい事故を防ぐ最短の方法です。

次に読む

出典(一次情報)

  • OpenSSL Library「Release Strategy」 — openssl-library.org(LTS の方針、各系列のサポート終了日)
  • OpenSSL Library「Security Policy」 — openssl-library.org(重大度の4段階、事前告知)
  • Red Hat「Backporting Security Fixes」 — access.redhat.com(バージョン番号だけでは脆弱性の有無を判断できない理由)
  • NIST NVD「CVE-2014-0160」 — nvd.nist.gov(Heartbleed)

よくある質問

QOpenSSL を自分でインストールした覚えがないのに、使っていることはありますか?
A

ほぼ確実に使っています。OpenSSL は、Web サーバー(Nginx/Apache)、OS、各言語のランタイムなどが内部で利用する基盤のライブラリだからです。あなたが直接コードに書かなくても、HTTPS で通信している時点で OpenSSL(または互換の実装)が下で動いていることが多い。『自分は使っていない』という思い込みこそ、基盤ライブラリの脆弱性を見逃す原因になります。

QLibreSSL や BoringSSL とは何が違いますか?
A

どちらも OpenSSL から派生(フォーク)した実装です。LibreSSL は Heartbleed 後に OpenBSD プロジェクトがコードを整理して作ったもの、BoringSSL は Google が自社用途向けに作ったものです。一般の利用者が選び分ける必要はあまりなく、『自分のプラットフォームが採用している実装を、サポート中のバージョンで最新に保つ』ことの方がずっと重要です。

Qバージョンの確認や更新はどうすればいいですか?
A

多くの環境では `openssl version` で確認でき、更新は OS のパッケージ管理やコンテナのベースイメージ更新を通じて行います。肝心なのは、サポートが終了した系列(EOL)を使い続けないこと。EOL のライブラリには、新しい脆弱性が見つかっても修正が出ません。基盤ライブラリも、アプリの依存と同じように継続的に追うのが安全です。

QOpenSSL と SSL は何が違いますか?
A

SSL(今は後継の TLS)は、通信を暗号化するための約束事(プロトコル)の名前です。OpenSSL は、その約束事を実際に動かすプログラム(ライブラリ)の名前です。HTTPS で通信するとき、Web サーバーは OpenSSL などのライブラリを使って TLS の処理をしています。

QOpenSSL 3.0 はもう使えませんか?
A

OpenSSL プロジェクトとしての 3.0 のサポートは終わっています(有償の延長サポートを除く)。ただし、Linux ディストリビューションが配る 3.0 は、その OS のサポート期間中は提供元が修正を取り込み続けていることがあります。自分でビルドした 3.0 やアプリに同梱された 3.0 は修正が届かないので、3.5(LTS、2030年4月まで)など、サポート中の系列へ移ります。

QOpenSSL の脆弱性が公表されたら、まず何をすればいいですか?
A

まず重大度を見ます。Critical か High なら、自分のサーバー・コンテナ・アプリが影響する系列の OpenSSL を使っているかを確認し、OS の提供元やイメージの配布元から修正版が出たらすぐに更新します。更新後は、OpenSSL を読み込んでいるプロセス(Web サーバーなど)を再起動しないと、古いライブラリがメモリに残ったままになる点に注意します。