Instiq
第3章 · HTTPサーバーとプロキシサーバー·v1.0.0·更新 2026/7/7·読了目安 約13分

変更要約: 初版(主題2.09・副主題2.09.1〜2.09.4に対応)

3.2OpenSSLとHTTPSの設定

この節の要点

OpenSSLを使ったApacheのHTTPS化を学びます。証明書・秘密鍵の保管場所(/etc/ssl//etc/pki/)、SSLEngineでのSSL/TLS有効化、SSLCertificateFileSSLCertificateKeyFileによる証明書と秘密鍵の指定、SSLProtocolSSLCipherSuiteによるプロトコル/暗号スイートの制御、SSLCACertificateFileSSLCACertificatePathによるCA証明書の指定、opensslコマンドでの鍵・証明書操作を押さえます。

平文のHTTPは通信内容が盗聴・改ざんされうるため、実運用のWebサーバーはほぼ例外なくHTTPS化されています。ApacheでのTLS設定と、その裏側で鍵・証明書を扱うOpenSSLの基本操作は、L2で問われる実務スキルの中核です。

3.2.1証明書・鍵の保管場所とopenssl操作

  • 証明書・秘密鍵・CA証明書は慣習的に/etc/ssl/(Debian系に多い)または/etc/pki/(RHEL系に多い)配下に配置されます。
  • opensslコマンドは秘密鍵の生成、証明書署名要求(CSR)の作成、自己署名証明書の発行、証明書内容の確認など、鍵・証明書のライフサイクル全般を扱います。

3.2.2ApacheのTLSディレクティブ

  • SSLEngine onでそのVirtualHostにSSL/TLSを有効化。SSLCertificateFileでサーバー証明書、SSLCertificateKeyFileで対応する秘密鍵のパスを指定します(証明書と鍵は必ずペア)。
  • SSLProtocolで許可するプロトコルバージョン(例:古いSSLv3を無効化しTLSのみ許可)、SSLCipherSuiteで許可する暗号スイートの組み合わせを制御し、脆弱な設定を排除します。
  • クライアント証明書認証などでCAを検証させたい場合はSSLCACertificateFile(1ファイルにまとめたCA証明書)またはSSLCACertificatePath(CA証明書を格納したディレクトリ)を指定します。
試験ポイント

「SSLCertificateFile=証明書、SSLCertificateKeyFile=秘密鍵」「SSLProtocol=許可プロトコル、SSLCipherSuite=許可暗号スイート」「SSLCACertificateFile=1ファイル、SSLCACertificatePath=ディレクトリ」の対応関係が定番です。SSLEngineをonにし忘れると証明書を指定していてもHTTPSが有効になりません。

典型的な導入手順を追うと理解が深まります。まずopensslで秘密鍵を生成し、その鍵をもとにCSR(証明書署名要求)を作成して認証局へ送るか、社内検証用なら自己署名証明書をその場で発行します。得られた証明書と秘密鍵は/etc/ssl//etc/pki/配下に配置し、パーミッションを絞って秘密鍵が読めるのはroot(またはApacheの実行ユーザー)に限定します。ApacheのVirtualHost設定では、まずSSLEngine onでTLSを有効化し、SSLCertificateFile /etc/ssl/certs/example.crtSSLCertificateKeyFile /etc/ssl/private/example.keyのように証明書と鍵のパスをそれぞれ指定します。ここで証明書と鍵の組み合わせを取り違えると起動時にエラーになるため、ペアの整合性は最初に確認すべき点です。さらにSSLProtocol -all +TLSv1.2 +TLSv1.3のように古いプロトコルを明示的に無効化し、SSLCipherSuiteで弱い暗号を除外した組み合わせのみを許可することで、脆弱ないわゆる「なんでも許可」の設定を避けます。クライアント証明書による相互TLSが必要な場合は、SSLCACertificateFileまたはSSLCACertificatePathで信頼するCAの情報を追加します。これらのディレクティブはApache固有ですが、鍵や証明書そのものの生成・検証・変換は一貫してopensslコマンドの守備範囲です。

ディレクティブ指定内容備考
SSLEngineSSL/TLSの有効化onにしないと他の設定があっても無効
SSLCertificateFileサーバー証明書SSLCertificateKeyFileと必ずペア
SSLCertificateKeyFile秘密鍵パーミッションを限定
SSLCACertificateFile / SSLCACertificatePath信頼するCA証明書ファイル1つ/ディレクトリ
注意

ひっかけ: 「SSLCertificateKeyFileに証明書を、SSLCertificateFileに秘密鍵を指定する」ように役割を逆に書いた選択肢は誤りです。Fileが証明書、KeyFileが秘密鍵です。また「SSLCipherSuiteはプロトコルバージョンを指定する」も誤り=プロトコルバージョンはSSLProtocol、暗号スイートの組み合わせはSSLCipherSuiteという別ディレクティブです。

openssl での鍵・証明書生成からSSLEngine/SSLCertificateFile/SSLCertificateKeyFileでのApache設定までの流れを示す図。
Fileは証明書・KeyFileは秘密鍵

3.2.3この節のまとめ

  • SSLEngine onで有効化、SSLCertificateFile=証明書/SSLCertificateKeyFile=秘密鍵。保管は/etc/ssl/・/etc/pki/
  • SSLProtocol=許可プロトコル/SSLCipherSuite=許可暗号、CA検証はSSLCACertificateFile(1ファイル)/SSLCACertificatePath(ディレクトリ)。鍵・証明書操作はopenssl

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. ApacheのVirtualHostでHTTPSを有効化し、証明書と秘密鍵をそれぞれ指定したい。正しい組み合わせは?

Q2. 脆弱な古いプロトコル(SSLv3等)を無効化し、TLS1.2以降のみを許可したい。使うべきディレクティブは?

Q3. クライアント証明書認証のため、信頼するCA証明書をまとめた1つのファイルを指定したい。適切なディレクティブは?

理解度を確認第3章「HTTPサーバーとプロキシサーバー」の問題を解く