〜 Apacheで安全な通信を実現する方法 〜
目次
📌 概要
Apache HTTPサーバーにHTTPS機能を追加することで、通信内容を暗号化し、安全なWebサービスを提供できます。この記事では以下を解説します:
- OpenSSLによる鍵・証明書の作成
- ApacheへのSSL設定の反映方法
- 商用証明書の申請や自己署名証明書の設定方法
- セキュアなSSL/TLS構成のポイント
🛠 1. OpenSSLの基本操作
🔑 鍵(private key)とCSR(証明書署名要求)の作成
# サーバー秘密鍵(2048ビット)作成
openssl genpkey -algorithm RSA -out server.key -aes256
# CSRの作成(公開情報を入力)
openssl req -new -key server.key -out server.csr
server.key: サーバー秘密鍵server.csr: 商用CAに提出する証明書署名要求(CSR)
🧾 自己署名証明書の作成(テスト用途)
openssl req -x509 -days 365 -key server.key -in server.csr -out server.crt
📁 2. ファイルの配置場所(ディストリビューション別)
| ディレクトリ | 説明 |
|---|---|
/etc/ssl/ | 証明書や鍵の一般的な配置先(Debian系) |
/etc/pki/tls/ | Red Hat系の標準パス |
/etc/httpd/conf.d/ssl.conf | SSL設定ファイル(CentOS/RHEL) |
/etc/apache2/sites-available/default-ssl.conf | SSLサイト設定(Debian/Ubuntu) |
⚙️ 3. ApacheにSSLを設定する
主要ディレクティブ
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
SSLCACertificateFile /etc/ssl/certs/ca_bundle.crt
SSLCertificateChainFile /etc/ssl/certs/intermediate.crt
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:!aNULL:!MD5
</VirtualHost>
| ディレクティブ | 説明 |
|---|---|
SSLEngine on | HTTPS通信を有効にする |
SSLCertificateFile | 公開証明書 |
SSLCertificateKeyFile | 秘密鍵 |
SSLCACertificateFile | 中間CA証明書(必要な場合) |
SSLProtocol | 使用するTLS/SSLバージョンの制御 |
SSLCipherSuite | 使用する暗号スイートの制限 |
🧰 4. 必要モジュールの有効化(Debian系)
sudo a2enmod ssl
sudo a2ensite default-ssl
sudo systemctl reload apache2
🚨 5. SSLのセキュリティ強化ポイント
| 対策 | 内容 |
|---|---|
| 古いプロトコルの無効化 | -SSLv2 -SSLv3 を明示的に除外 |
| 弱い暗号スイート除外 | !aNULL:!eNULL:!EXPORT:!DES:!RC4 など |
| HSTSヘッダ追加 | HTTPヘッダに Strict-Transport-Security を設定する |
| OCSP Staplingの有効化 | SSL証明書の失効確認を高速・安全に行う |
| 設定テスト | SSL Labs で評価可能 |
🧪 6. 設定後の確認
✅ Apache設定の構文チェック
apachectl configtest
🔍 ポート443でのリッスン確認
sudo ss -tlnp | grep 443
🔐 ブラウザ確認(https://localhostなど)
- 証明書エラーが出る場合は自己署名証明書である可能性あり
- 商用CAの証明書ならエラーなし
📦 7. 商用SSL証明書の流れまとめ
- OpenSSLでCSRと鍵を生成
- CSRを証明機関(CA)へ送信
- CAから
.crtや中間証明書が届く - ApacheのSSL設定に反映
- 設定反映後、HTTPSで公開!
🧾 まとめ表
| 項目 | 設定/ファイル | 備考 |
|---|---|---|
| 鍵と証明書 | openssl, server.key, server.crt, server.csr | 自己署名 or 商用 |
| Apache設定 | SSLEngine, SSLCertificateFileなど | /etc/httpd/conf.d/ssl.confなど |
| セキュリティ強化 | SSLProtocol, SSLCipherSuite | 弱いプロトコルは無効化 |
| 配置場所 | /etc/ssl/, /etc/pki/ | ディストリビューションで異なる |
| モジュール有効化 | a2enmod ssl | Debian系向け操作 |
📘 補足:Let’s Encryptの自動証明書管理
無料のSSL証明書を自動で発行・更新する「Let’s Encrypt」もおすすめです。
sudo apt install certbot python3-certbot-apache
sudo certbot --apache
ApacheでHTTPSを有効にすることで、安全性と信頼性の高いWebサービスを提供できます。OpenSSLを使った証明書生成と設定をしっかり理解し、セキュアな構築ができるようになりましょう!
コメント