鍵をかけても、ドアが「ベニヤ板」では意味がない。
こんにちは!「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回】Webサーバーの常時SSL化!TLSの仕組みと自己署名証明書の作成
- 【第2回】無料証明書のスタンダード!Let’s Encrypt (Certbot) の導入と自動更新
- 【第3回】企業サイトならこれ!有料証明書(JPRS/GlobalSign)のCSR生成とインストール
- 【第4回】セキュリティ強度を上げる!プロトコル(TLS1.3)と暗号スイートの最適化
- 【第5回】1つのIPで複数ドメイン!バーチャルホストでのSSL設定とSNIの仕組み
- 【第6回】「繋がらない」を解決!中間証明書チェーンとトラブルシューティング
- 【第7回】運用を楽にする!証明書期限監視と更新プロセスの自動化
- 【第8回】大規模構成!ロードバランサ連携とHTTP/2・HTTP/3 (QUIC) 対応
第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.0 や TLSv1.1 が表示されていたら、それは「穴」です。
第2章:【設定1】古いプロトコルの無効化
まずは「プロトコル(通信規格)」の選定です。
歴史的に多くのバージョンがありますが、現在安全とされるのは TLS 1.2 と TLS 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」で自分専用環境
サーバー知識を年収に
「ITエンジニア転職」


コメント