web-dev-qa-db-ja.com

ApacheサーバーのSSL暗号スイートでRC4を無効にする

どうぞ、私自身の答えでEDITセクションを見てください。彼らはこの難問についての説明を含んでいます

私はCentOS 6.5 VPS上で動作するApache 2.2.9サーバーに対してRC4を無効にしようとしていますが、成功しないようです。

最近購入したビジネス検証済みの証明書がインストールされ、SSL接続は問題なく実行されていますが、チュートリアルに示されているように「セキュリティを強化する」ために可能な限り設定することを望みました。

Qualys SSL Labsで設定を確認すると、結果ページに「このサーバはRC4暗号を受け入れますが、これは脆弱です。グレードはBに制限されています」と表示されます。

しかし、私はこれをssl.confに入れました:

 SSLCipherSuite HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!SSLv2:!SSLv3

this question の答えで与えられたスクリプトをtest-ssl-ciphers.shという名前のファイルに保存し、IPアドレスをループバックアドレスに変更しました。これは./test-ssl-ciphers.sh | grep -i "RC4"の結果です。

Testing ECDHE-RSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ECDHE-ECDSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing AECDH-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ADH-RC4-MD5...NO (sslv3 alert handshake failure)
Testing ECDH-RSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing ECDH-ECDSA-RC4-SHA...NO (sslv3 alert handshake failure)
Testing RC4-SHA...NO (sslv3 alert handshake failure)
Testing RC4-MD5...NO (sslv3 alert handshake failure)
Testing RC4-MD5...NO (sslv3 alert handshake failure)
Testing PSK-RC4-SHA...NO (no ciphers available)
Testing KRB5-RC4-SHA...NO (no ciphers available)
Testing KRB5-RC4-MD5...NO (no ciphers available)
Testing EXP-ADH-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-RC4-MD5...NO (sslv3 alert handshake failure)
Testing EXP-KRB5-RC4-SHA...NO (no ciphers available)
Testing EXP-KRB5-RC4-MD5...NO (no ciphers available)

これらの各行には "NO"が含まれています。スクリプトによると、サーバーは指定された暗号の組み合わせをサポートしていません。

さらに、コマンドgrep -i -r "RC4" /etc/httpdから、上記のssl.confファイルのみが得られます。

また、私の暗号スイートでopenssl ciphers -Vを実行してもRC4暗号がまったく表示されないため、構成文字列を考えると意味があります。

だから私はどういうわけかSSLチェックウェブサイトが私に「サーバーはRC4を受け入れる」と言っているのかどうかについて迷っています。彼らは、受け入れられているとして、以下の暗号さえリストします:

TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_RC4_128_SHA
TLS_ECDHE_RSA_WITH_RC4_128_SHA

誰かが可能な説明を持っていますか?何がおかしいのですか? RC4のサポートや「受け入れ」を設定する場所が他にあるかもしれません。

ありがとう。

[EDIT]自宅の仮想マシンでCentOS 6.6を使用して、ループバックアドレスの代わりにドメイン名を使用してVPSに対してスクリプトを再度実行しました。この設定は暗号のリストがVMのopensslインスタンスによって提供されることを意味します:私はまだYESをもたらす暗号の中にRC4を持っていません。

17
AbVog

更新された証明書をインストールしている間に、問題がISPConfigでHTTPSに必要なデータのセット全体(証明書、秘密鍵、CAチェーンなど)を指定することによって引き起こされることがわかりました。

別の言い方をすると、一連のデータを削除すると、QualysテストでドメインAが格付けされ、同時にRC4に関する警告も削除されます。詳細を元に戻すと、警告が戻ってきてグレードが再びBに制限されるため、因果関係について疑う余地はありません。

それはあたかも各仮想ホストの詳細を与えることが何らかのデフォルトが私がssl.confで指定した暗号スイートを上書きした新しい環境を作成したかのようです。変です。

解決策は、各仮想ホストのApacheディレクティブテキストエリアにSSLCipherSuite仕様を追加することです。これは私が私にAグレードを取得する構成にあるものです。

SSLProtocol ALL -SSLv2 -SSLv3
SSLHonorCipherOrder on
# Compression is disabled by default on my distribution (CentOS 6)
# SSLCompression off 
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

EDIT(2017-05-16):この問題に関する追加の発見:SSLCipherSuiteの指定は必須です。 サーバーレベルで指定されているにもかかわらず、その特定のディレクティブが自動的に仮想ホスト構成に適用されないのはなぜでしょうか。 CentOS 6.9上でApache 2.2.15を実行しています。

編集(2018年6月18日):詳細については。 SSLCipherSuiteディレクティブは一度だけ指定でき、それがすべての仮想ホストに適用できることを発見しました。(ベースのmod_ssl設定ファイルでは(CentOS 6では、ファイルは/etc/httpd/conf.d/ssl.confにあります)、単にディレクティブを指定するだけです)デフォルトの仮想ホストの外側。 Apache 2.2のドキュメントには、このディレクティブのデフォルト値はSSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXPであると書かれています。私はこれがRC4暗号が由来するところであると思います:どんな仕様も「グローバルな」文脈になかったので私には当てはまりました、仕様が何もない場合、デフォルト値が適用されます。この理解は私にとって謎だったことを終わらせます。皮肉なことに、この説明が見つかったらCentOS 7に切り替えようとしています。 HTH.

15
AbVog
SSLCipherSuite HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!SSLv2:!SSLv3
                                                                    ^^^^^^^

悪いアイデア。すべてのSSLv3暗号を無効にすると、TLS1.0およびTLS1.1で使用可能な暗号が無効になり、TLS1.2で新しく導入された暗号はわずかになります(サーバーがTLS1.2をサポートしている場合)

だから私はどういうわけかSSLチェックウェブサイトが私に「サーバーはRC4を受け入れる」と言っているのかどうかについて迷っています。彼らは、受け入れられているとして、以下の暗号さえリストします:

ローカルテストと外部テストの両方が同じサーバー(IPアドレス)にアクセスすることを確認してください。私はexample.comwww.example.comとは異なるホスト上にあり、したがってテストが異なるというサイトをたくさん見ました。

5
Steffen Ullrich

Qualys SSLラボはデフォルトホストなどに非常に敏感です。そのIPアドレス上のすべてのHTTPS VirtualHostが(証明書ファイルを除いて)まったく同じ設定を使用していることを確認してください。いくつかのテストはデフォルトのVirtualHostを採用しているようです。私のターゲットとなる仮想ホストは単一の暗号化しか有効にしていませんでしたが、Qualysはデフォルトの仮想ホストからもっと大きなリストを見つけていました。

私はまた、SSLテストに関するより徹底的な情報を提供する見栄えの良いスクリプト をここ で見つけました。

2
Geoff

私のサイトの1つを探していました。 @ AbVogの答えに基づいて、私のディレクティブは実際にはデフォルトの仮想ホストの中だけにあることがわかりました。ディレクティブをグローバルなコンテキストに移動したとき、すべてが良かったです。

余談ですが、私は https://cipherli.st/ にも出会いました。さまざまなパッケージのSSL設定の良いリストがあります。 Apacheの現在の推奨事項は次のとおりです。

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff

# Requires Apache >= 2.4
SSLCompression off 
SSLSessionTickets Off
SSLUseStapling on 
SSLStaplingCache "shmcb:logs/stapling-cache(150000)" 
2
boyvinall

私のFedora 25ではApache/2.4.25暗号が暗号化ポリシーによって扱われます(/ etc/cryptopolicies/backendsを見てください)。デフォルト設定ではRC4が完全に無効になっているので、Apache設定で暗号を改ざんする必要はありません。最新のssl.confはデフォルトではインストールされず、conf.dディレクトリにssl.conf.rpmnewとして残されているため、必ず最新のssl.confを使用してください。

SSLを設定するために、証明書、ServerNameとDocumentRootを指定するだけです。それはSquirrelmailです。

SSLCertificateFile /etc/letsencrypt/live/mail.xxxx.dk/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mail.xxxx.dk/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/mail.xxxx.dk/chain.pem
SSLCACertificateFile /etc/letsencrypt/live/mail.xxxx.dk/fullchain.pem
ServerName mail.xxxx.dk:443
DocumentRoot "/usr/share/squirrelmail"
0