Apache
mod_ssl

Apache 2.4にmod_sslを設定する

はじめに

昨今ウェブサイトのHTTPS化が必須になってきたので、Apacheサーバにmod_sslをインストールする手順をまとめました。

以下の方針で設定しています。

  • TLSv1.1以上を強制
  • 割と強い暗号スイートのみを使用

更新履歴

2018.6.19 セキュリティ基準を強化

前回までの記事はこちら

Apacheのインストール手順などは以下の関連記事をお読みください。

インストール手順

作業方針

前回までと同様にyumを使ってインストールします。

mod_sslインストール

以下のコマンドでApache向けmod_sslモジュールをインストールします。

yum -y install mod_ssl

mod_ssl設定

SSL設定は以下のように行います。
強度が弱すぎるプロトコルや暗号方式のみブロックしています。

/etc/httpd/conf.d/ssl.conf
Listen 443 https
Mutex default ssl-cache
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:!DSS
SSLCompression off
SSLCryptoDevice builtin
SSLHonorCipherOrder on
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLProtocol -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2
SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout  300
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache shmcb:/var/run/ocsp(128000)
SSLStrictSNIVHostCheck off
SSLUseStapling on

<VirtualHost *:443>
    ServerName ドメイン名
    ServerAdmin 管理者のメールアドレス
    DocumentRoot ドキュメントルートパス
    ErrorLog logs/ssl_error_log
    TransferLog logs/ssl_access_log
    LogLevel warn
    SSLEngine on
    SSLCertificateKeyFile 秘密鍵ファイル(KEY)のパス
    SSLCertificateFile サーバ証明書ファイル(CRT)のパス
    SSLCertificateChainFile 中間証明書ファイルのパス(※中間証明書が不要な場合は行削除)
    BrowserMatch "MSIE [2-5]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
    CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

HTTP→HTTPS転送設定

以下の設定で、mod_rewriteモジュールを使って全てのHTTPアクセスをHTTPSに転送します。
(※httpdパッケージに同梱されており、yumで追加インストールは必要ありません)
必要に応じて設定してください。

/etc/httpd/conf.d/rewrite.conf
<IfModule rewrite_module>
    RewriteEngine On
    LogLevel alert rewrite:trace3
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>