web-dev-qa-db-ja.com

Apacheでデフォルトで完全転送秘密を有効にするにはどうすればよいですか?

警告:以下の回答から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>

Perfect Forward Secrecyをサポートするにはどうすればよいですか?デフォルトでSSL完全転送秘密を有効にするにはどうすればよいですか?どうすれば強制できますか?

66
Jannik Jochem

どうですか:

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オプションです。最後に認証なし/弱い暗号化/弱いハッシュ化を除外することは、単に良好な衛生状態のためであり、そのような暗号が導入されていないため、省略できます。パフォーマンスが懸念される場合は、EEDCHのみを使用し、EDHを省略します。

Apache 2.2と組み合わせて(@Brunoが言うようにEECDHはありません)、 https://www.ssllabs.com/ssltest/analyze.html に従って、これはiOS SafariのみのPFSを実現します。 IEおよびFirefoxはTLSv1.0であるため、BEASTを回避するためにRC4を取得します。 (悲しいかな、EDH RC4のようなものはないので、EEDCHなしではPFSをあきらめます)。これは、Apache 2.2のブラウザで期待できる最高のものだと思います。 Chromeは、TLSv1.1をサポートし、BEASTに対して脆弱ではなくEDH AESを使用できるため、サービスが不十分な唯一のものです。代わりに、FirefoxやIEのようなRC4-RSAを取得します。 ApacheをアップグレードしてEECDH RC4を有効にすると、Firefox、IE、およびChromeのPFSが取得されます。

2013年11月9日更新:

ウェブ上でいくつかの代替の推奨事項を見つけました。彼らは、BEASTの保護をあまり重視せず(おそらく賢明です。BEASTは ほとんどがクライアント側で軽減されます )、完全な前方秘匿性を重視しています。程度はさまざまですが、GCMに対する選好が強く、RC4を受け入れたくありません。

特に注目すべきは、次の推奨事項です。

個人的には、Mozilla OpSecを使用します。彼らの理由は彼らのページでよく説明されています。注目すべきは、AES256よりもAES128を好むことです。彼らの言葉で:「[AES128]は優れたセキュリティを提供し、本当に高速で、タイミング攻撃に対してより耐性があるようです。

Ivan RisticとGeoffroy Gramaizeの勧告で注目すべきは、SSLv3が無効になっていることです。 SSLv3とTLS v1.0のセキュリティ関連の違いは Wikipediaで言及されています ですが、これはほとんどIE6を壊すだけだと思います。

犯罪違反 についても話をしていませんでした。 CRIMEから保護するには、SSL圧縮を無効にします。これはリンクされている例に含まれています。 BREACHから保護するには、HTTPレベルで圧縮を無効にする必要があります。 Apache 2.4の場合、これをグローバルに1回実行するだけです。

<Location />
  SetEnvIfExpr "%{HTTPS} == 'on'" no-gzip
</Location>

古いバージョンのApacheの場合、SSLEngineがオンになっている各VirtualHostにこれを配置します。

<Location />
    SetEnv no-gzip
</Location>

2014-10-14の更新:Mozilla OpSecガイドは、旧/中/現代の互換性に関する推奨事項に分割されました。中間または最新の設定では、SSLv3が無効になります。これにより、POODLE攻撃から保護されます。

93
Lorrin

私の理解では、SSLHonorCipherOrderをアクティブにし、SSLCipherSuiteECDHEおよびDHE暗号をopenssl ciphers -vから追加する必要があります

私の/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

Webサイトをテストするには、次を使用できます。 https://www.ssllabs.com/ssltest

注:楕円曲線DHEは、Apache 2.3.3以降でのみ動作するようです( source およびBrunoのコメントを参照)。

6
kunnix

Main/core confディレクティブのhttpd.confに次の暗号コードを入力します。

SSLCipherSuite AES128+EECDH:AES128+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off 
SSLUseStapling on 
SSLStaplingCache "shmcb:logs/stapling-cache(150000)" 

次の場所でテストすることで、セキュリティの状態を確認することもできます。 https://www.ssllabs.com/ssltest/analyze.html

3
VaTo

Perfect Forward Secrecyを提供する暗号スイートは、ephemeral形式のDiffie-Hellman鍵交換を使用するものです。欠点はオーバーヘッドです。これは、楕円曲線バリアントを使用して改善できます( Vincent Bernatのブログ を参照してください)。

Apache Httpdの暗号スイート(OpenSSLでコンパイルされたmod_sslを使用している場合)はSSLCipherSuiteを使用して設定され、openssl ciphersコマンドの使用時に表示されるリストを取得します。 OpenSSL manページ を見ると、kEDHが探しているものであることがわかります。 (暗号スイートを個別にリストすることもできます。)

3
Bruno

Ssl.confで次のコードを試してください。

SSLProtocol +TLSv1.2 +TLSv1.1 +TLSv1
SSLCompression off
SSLHonorCipherOrder on
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RC4-SHA:AES256-GCM-SHA384:AES256-SHA256:CAMELLIA256-SHA:ECDHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:CAMELLIA128-SHA

ところで、

エキスパートのヒント:(1/n-1)スプリットレコードトリックは、しばらくの間Firefoxに実装されています。したがって、詳細設定メニューでFirefoxのRC4を安全に無効にできます。これを行うには、アドレスバーに「about:config」と入力し、「rc4」を検索して、見つかったすべての値を「false」に切り替えます。接続の問題が発生した場合は、それらのパラメーターをtrueに戻します。

https://cc.dcsec.uni-hannover.de/

このWebサイトは、HTTPS接続を保護するためにブラウザーがサポートするSSL暗号スイートに関する情報を提供します。

2
huuu

この記事は、フォワードセキュリティを設定し、現在の標準に関する最新情報を取得するのに役立ちます- https://community.qualys.com/blogs/securitylabs/2013/08/05/configuring-Apache-nginx-and- openssl-for-forward-secrecy

2015年9月16日の時点で、これによりSSLLabsのテスト結果がAになります。

SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:EDH+aRSA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4
2
Mike M

https://cipherli.st をご覧ください

いくつかのサービスの設定スニペットをコピー&ペーストすると、強力なSSLセキュリティ設定が保証されます。

2
Adam

SSLLabs でグレードA(2016年9月)を取得しました。Apacheでこのssl.conf構成を使用して、Windows XP/Internet Explorer 8を引き続きサポートしています。

SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite EECDH+AESGCM:AES256+EECDH:DES-CBC3-SHA

簡単に説明すると、 TLS のみが許可されます。互換性のためにすべてのバージョンがサポートされ、DES-CBC3-SHA暗号も互換性のために許可されます。最初の好ましい2つの暗号は 楕円曲線Diffie-Hellman を使用していますが、最後はフォールバックとして追加されました。これは 利用可能な暗号の中で優れたオプションXP/IE です。利用可能な最新のOpenSSLバージョンをインストールしている場合、このミックスは、私が書いている時点でAを取得するのに十分です。

これが役に立てば幸いです。

0
chirale