*警告: 以下の回答から、Apacheの設定に関する推奨事項のみを使用してください。どの暗号を使うかについては、セキュリティ規範は時間とともに変化し、以下のセキュリティアドバイスのいくつかはすでに時代遅れになっています。
最近の出来事をきっかけに、Apacheの設定を再考しています。現在、私のapacheのサイト構成は以下のようになっています。
<IfModule mod_ssl.c>
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com
</VirtualHost>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName example.com
DocumentRoot /var/www-wordpress
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www-wordpress>
Options Indexes FollowSymLinks MultiViews
AllowOverride FileInfo
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
SSLCertificateFile /etc/ssl/certs/example.com.crt
SSLCertificateKeyFile /etc/ssl/private/example.com.key
SSLCertificateChainFile /etc/ssl/certs/sub.class1.server.ca.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
完全な前方秘匿をサポートするためにはどうしたらよいですか?どうすれば、デフォルトでSSLパーフェクトフォワードセクレシーを有効にできますか?どのようにしたらそれを強制できますか?
どうでしょう。
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite EECDH+AES:EDH+AES:-SHA1:EECDH+RC4:EDH+RC4:RC4-SHA:EECDH+AES256:EDH+AES256:AES256-SHA:!aNULL:!eNULL:!EXP:!LOW:!MD5
SSLv3を無効にするための-SSLv3フラグが追加されていることに注意してください。これはPOODLE攻撃から保護するために追加されました。
これにより、完全な前方秘匿が好まれますが、BEAST攻撃に対して脆弱であるという犠牲を払う必要はありません。Apache にはプロトコルのバージョンに基づいた暗号の優先順位を設定する方法がないので、 新しいプロトコルでしか利用できない暗号を参照することでそれをごまかしました。具体的には、AESはTLSv1.2までSHA1ハッシュでのみ利用可能でした。したがって、このリストはTLSv1.2のエフェメラルDiffie-Hellman暗号から始まり、RC4(最初はエフェメラルDH付き、次になし)、そして最後にBEAST脆弱なAESオプションがあります。最後のno auth / weak encryption / weak hashingの除外は、単に衛生上の理由からで、そのような暗号が導入されていないため、省略することも可能である。パフォーマンスが気になる場合は、EECDHのみを使用し、EDHを省略します。
Apache 2.2 (従って @Bruno が言うように EECDH はない) との組み合わせで、https://www.ssllabs.com/ssltest/analyze.html あたりで、iOS Safari のみでPFSを達成することができます。IE と Firefox は TLSv1.0 なので、BEAST を回避するために RC4 を取得します。(残念ながら、EDH RC4 というものは存在しないので、EECDH がなければ PFS はあきらめることになります)。これは、Apache 2.2上のこれらのブラウザで期待できる最高のものだと思います。ChromeはTLSv1.1をサポートしており、BEASTの影響を受けずにEDH AESを使用できたので、唯一役に立ちません。その代わり、FirefoxやIEのようにRC4-RSAが使用されます。EECDH RC4を有効にするためにApacheをアップグレードすると、Firefox、IE、ChromeでPFSを利用できるようになるはずです。
2013-11-09:を更新しました。
ウェブ上でいくつかの代替案を見つけました。BEASTの保護はあまり重視されておらず(おそらく賢明です。BEASTは現在ではほとんどクライアント側で軽減されています)、完全な前方秘匿をより重視しています。また、程度の差はありますが、GCM をより強く好み、RC4 を受け入れたがらない傾向があります。
特に注目すべきは、以下の提言だと思う。
個人的には、Mozilla OpSecの方を推します。彼らの理由は彼らのページでよく説明されています。注目すべきは、彼らは AES256 よりも AES128 を好んでいることです。彼らの言葉を借りれば: "[AES128] provides good security, is really fast, and seems to be more resistant to timing attacks.".です。
Ivan Ristic's と Geoffroy Gramaize's の勧告で注目すべきは、SSLv3が無効になっていることです。SSLv3とTLS v1.0のセキュリティに関するいくつかの違いはWikipediaに書かれていますが、これはほとんどIE6を壊すだけだと思います。
また、以前はCRIMEとBREACHの話をしませんでした。CRIMEから身を守るには、SSL圧縮を無効にすることです。これはリンク先の例に含まれています。BREACHから保護するためには、HTTPレベルで圧縮を無効にする必要があります。Apache 2.4の場合、グローバルに一度だけこれを行います。
<Location />
SetEnvIfExpr "%{HTTPS} == 'on'" no-gzip
</Location>
古いバージョンのApacheの場合は、SSLEngineが稼働している各VirtualHostに設置します。
<Location />
SetEnv no-gzip
</Location>
2014-10-14:を更新しました。 Mozilla OpSecのガイドが、旧/中間/現代の互換性についての推奨事項に分割されました。intermediateやmodernからの設定では、結局SSLv3が無効になってしまいます。これでPOODLE攻撃から守れます。
私の理解では、SSLHonorCipherOrder
を有効にし、SSLCipherSuite
の前に openssl ciphers -v
から ECDHE
と DHE
暗号を追加する必要があります。
私の /etc/apache2/mods-available/ssl.conf
からです。
SSLHonorCipherOrder on
SSLCipherSuite ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:DHE-RSA-CAMELLIA128-SHA:AES128-SHA:RC4-SHA:HIGH:!aNULL:!MD5:!ADH
あなたのウェブサイトをテストするには、https://www.ssllabs.com/ssltest。
注:Eliptic Curve DHEはApache 2.3.3以上でないと動かないようです(sourceとBruno'のコメント参照)。
完全前方秘匿を提供する暗号スイートは、Diffie-Hellman鍵交換のephemeral形式を使用するものです。その欠点はオーバーヘッドであり、楕円曲線の変種を使うことで改善できる(Vincent Bernat's blogを参照)。
Apache Httpd (OpenSSL と一緒にコンパイルされた mod_ssl
を使用している場合) の暗号スイートは、 openssl ciphers
コマンドを使用したときに見られるようなリストを受け取る SSLCipherSuite
を使用して設定します。OpenSSL man page](http://www.openssl.org/docs/apps/ciphers.html) を見てみると、kEDH
が探しているものであることがわかります。(暗号スイートを個別にリストアップすることもできます。)