【Apache SSL講座 第4回】目指せ評価A+!最新プロトコル「TLS 1.3」導入と暗号スイートの完全最適化

鍵をかけても、ドアが「ベニヤ板」では意味がない。

こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回までは、無料・有料それぞれのSSL証明書を取得し、Apacheにインストールする手順を学びました。

「よし、ブラウザに鍵マークが出た!これでセキュリティは完璧だ!」
…と、安心していませんか?

実は、それは大きな間違いです。
証明書はあくまで「身分証明書」。通信を暗号化する「金庫(プロトコルや暗号方式)」自体がボロボロだったら、鍵をかけても中身は盗まれてしまいます。

コウ君

先生、怖いこと言わないでくださいよ!
HTTPSになってれば安全なんじゃないんですか?
「ボロボロの金庫」ってどういうことですか?

リナックス先生

例えば、古い「SSL 3.0」や「TLS 1.0」といったバージョンが有効になったままだったり、解読方法が見つかっている古い暗号方式(RC4など)が使える状態だと、ハッカーに通信を覗き見られるリスクがあるの。
今回は、サーバーの設定(ssl.conf)をチューニングして、これらの脆弱性を排除し、最新・最強のセキュリティ強度を実現しましょう!

本記事では、AlmaLinux 9 の最新環境をフル活用し、爆速かつ安全な「TLS 1.3」の有効化、推奨される「暗号スイート」の設定、そしてセキュリティ評価サイトで満点を取るための「HSTS」設定までを徹底解説します。

🔒 Apache SSL/TLS 完全攻略講座(バックナンバー)

現在地:【第4回】セキュリティ強度を上げる!プロトコル(TLS1.3)と暗号スイートの最適化


第1章:現状の「健康診断」をしよう

設定を変更する前に、今のサーバーがどれくらい安全(または危険)なのかを知る必要があります。

Qualys SSL Labs で診断する

世界的に最も信頼されている無料の診断ツール SSL Server Test を使います。
対象のドメイン名を入力して「Submit」を押すだけです。

チェックポイント:

  • Overall Rating: 総合評価。「A」なら合格点ですが、設定次第で「A+」を狙えます。「B」や「C」なら要改善です。
  • Protocol Support: どのバージョン(TLS 1.0, 1.1, 1.2, 1.3)が有効か。
  • Cipher Suites: どんな暗号方式が使われているか。赤字で WEAK と書かれていたら危険信号です。

コマンドラインで診断する(nmap)

まだ公開前のサーバーなど、外部からアクセスできない場合は、nmap コマンドのスクリプト機能を使ってローカル診断が可能です。

sudo dnf install nmap -y
nmap --script ssl-enum-ciphers -p 443 localhost

このコマンドを実行すると、有効になっているSSL/TLSバージョンと、それぞれの暗号スイート一覧が表示されます。
TLSv1.0TLSv1.1 が表示されていたら、それは「穴」です。


第2章:【設定1】古いプロトコルの無効化

まずは「プロトコル(通信規格)」の選定です。
歴史的に多くのバージョンがありますが、現在安全とされるのは TLS 1.2TLS 1.3 だけです。

なぜ古いバージョンはダメなのか?

バージョン 状態 理由
SSL 2.0 / 3.0 禁止 POODLE脆弱性などがあり、簡単に解読される。論外。
TLS 1.0 / 1.1 禁止 BEAST, CRIMEなどの攻撃手法が存在する。主要ブラウザもサポート終了済み。
TLS 1.2 推奨 現在のデファクトスタンダード。ほぼ全ての端末で使える。
TLS 1.3 最高 最新規格。ハンドシェイクが高速で、セキュリティ強度も最強。

TLS 1.3 のメリット

TLS 1.3 は、単にセキュリティが高いだけではありません。
TLS 1.2 では通信開始までに「2往復(2-RTT)」のやり取りが必要でしたが、TLS 1.3 では「1往復(1-RTT)」に短縮されています。
これにより、特にスマホなどのモバイル回線において、Webサイトの表示速度(TTFB)が目に見えて向上します。

Apacheの設定(ssl.conf)

/etc/httpd/conf.d/ssl.conf を編集します。

sudo nano /etc/httpd/conf.d/ssl.conf

SSLProtocol ディレクティブを探し、以下のように書き換えます。
(AlmaLinux 9 のデフォルトでも安全寄りになっていますが、明示的に指定します)

# すべてを有効にしてから、古いものをマイナス(-)で消していくスタイル
# または、必要なものだけを書くスタイル(Apache 2.4以降推奨)

SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1

これで、TLS 1.2 と 1.3 だけが許可され、それ以外はシャットアウトされます。


第3章:【設定2】暗号スイート(Cipher Suite)の最適化

次に、「どの暗号方式を使うか」というリスト(暗号スイート)を定義します。
ここが少しややこしい部分ですが、基本的には「弱い暗号を排除し、強い暗号を優先する」設定を行います。

危険な暗号方式たち

  • RC4: 昔は推奨されていましたが、解析手法が見つかり現在は危険。
  • 3DES (Triple DES): 遅くて弱い。Sweet32脆弱性の対象。
  • CBCモード: 一部の実装でパディングオラクル攻撃に弱い。現在はGCMモードが推奨。

Mozilla SSL Configuration Generator の活用

暗号スイートの文字列を手書きするのはプロでも間違えます。
Mozilla(Firefoxの開発元)が提供している SSL Configuration Generator を使うのが鉄板です。

  • Server: Apache
  • Apache Version: 2.4.57 (AlmaLinux 9の場合)
  • OpenSSL Version: 3.0.7
  • Configuration: Intermediate(互換性重視) または Modern(最新ブラウザのみ)

通常は、幅広い端末(古いAndroidなど)もカバーできる「Intermediate(中間設定)」がおすすめです。

Apacheの設定(ssl.conf)

Generator で生成された設定を参考に、SSLCipherSuite を設定します。
TLS 1.3 用と TLS 1.2 用で設定項目が分かれています。

# サーバー側の優先順位を強制する(クライアントの言いなりにならない)
SSLHonorCipherOrder on

# TLS 1.3 用の暗号スイート(シンプル!)
SSLCipherSuite TLSv1.3 TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

# TLS 1.2 用の暗号スイート(弱いものを排除)
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384

これにより、AES-GCM や ChaCha20 といった、高速かつ安全な現代的な暗号方式のみが使われるようになります。


第4章:【設定3】HSTS で最高評価「A+」を狙う

ここまでの設定で、セキュリティ評価は「A」になります。
しかし、さらに上を目指すなら「HSTS (HTTP Strict Transport Security)」の設定が必須です。

HSTSとは?

Webサーバーがブラウザに対して「今後、私のサイトには絶対にHTTP(平文)でアクセスしないで!必ずHTTPSを使って!」と宣言する仕組みです。

一度HSTSヘッダーを受け取ったブラウザは、次回以降ユーザーが http://... と入力しても、ブラウザ内部で勝手に https://... に書き換えてからアクセスするようになります。
これにより、中間者攻撃(SSLストリップ攻撃)を無効化できます。

Apacheの設定(ssl.conf)

HTTPヘッダーを追加する設定を入れます。

# HSTSヘッダーの追加(有効期間: 1年間、サブドメインも含む)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

※注意:これを設定すると、証明書の更新を忘れたりしてHTTPSが使えなくなった時、HTTPでのアクセスもできなくなり、サイトが完全に見れなくなります。(「この接続は安全ではありません」を無視して進むこともできなくなります)
運用に自信がない場合は、最初は max-age=300(5分)などでテストすることをお勧めします。


第5章:設定の反映と確認

すべての設定が終わったら、Apacheを再起動して反映させます。

1. 構文チェック

sudo apachectl configtest

Syntax OK が出ることを必ず確認してください。

2. 再起動

sudo systemctl restart httpd

3. 再診断

もう一度 SSL Labs で診断してみましょう。
うまく設定できていれば、緑色の文字で「A+」という評価が表示されるはずです!
Protocol Support の欄には TLS 1.2 と 1.3 だけが表示され、Cipher Suites には緑色の安全な暗号だけが並んでいることでしょう。


第6章:トラブルシューティング「古い端末が見れない!」

セキュリティを高くすると、副作用として「古い端末からアクセスできなくなる」という問題が発生します。
これを「互換性のトレードオフ」と言います。

影響を受ける端末の例

  • Windows 7 以前のIE: TLS 1.1以下しか対応していない場合がある。
  • 古いAndroid (4.4以前): 最新の暗号スイートに対応していない。
  • ガラケー(フィーチャーフォン): ほぼ全滅(SHA-2証明書やTLS 1.2に対応していないため)。

どう判断すべきか?

現代のWeb運用において、Windows XPやガラケーのサポートを維持するためにセキュリティを下げるのは、リスクの方が大きすぎます。
基本的には「TLS 1.2以上を必須」とし、古い端末は切り捨てるのが業界標準です。

どうしても古い端末のサポートが必要な場合(社内のレガシーシステム用など)は、別途専用のバーチャルホストを立てるか、ロードバランサ側で吸収するなどの対策が必要になります。


まとめ:安全と高速を両立する最強設定

お疲れ様でした!
これで、あなたのWebサーバーは、金融機関レベルの堅牢なセキュリティ強度を手に入れました。

今回の重要ポイント:

  • SSL 3.0 / TLS 1.0 / 1.1 は即刻無効化する。
  • TLS 1.3 は安全なだけでなく、表示速度も速くなる。
  • 暗号スイートは Mozilla のジェネレータを参考に設定する。
  • HSTS を設定することで、評価「A+」と最強の保護が得られる。

さて、ここまでは「1つのサーバーに1つのドメイン」という前提で解説してきました。
しかし、実際の運用では「1台のサーバーで、コーポレートサイトとメディアサイト、キャンペーンサイトを全部ホストしたい」という要望が必ず出ます。

次回、第5回は「1つのIPで複数ドメイン!バーチャルホストでのSSL設定とSNIの仕組み」です。
IPアドレスを増やさずに、複数のHTTPSサイトを同居させる技術「SNI」の設定方法を解説します。
お楽しみに!

▼ エンジニアとしてのキャリアを加速させる ▼

最強設定を試す
「VPS」で自分専用環境

おすすめVPSを見る

サーバー知識を年収に
「ITエンジニア転職」

転職エージェントを見る

コメント