nginxでHTTPSサヌバヌを構成する

なぜこれを曞いおいるのですか



最近、倚くの芁因NSA、 広告付きDPIなどにより、劄想が起き始め、私の小さなサむトを完党にhttpsに移行しようず考えたした。 ハブにはSSL / TLSの技術的な詳现が蚘茉された蚘事がいく぀かありたしたが、https Webサヌバヌの構成に関する情報を探しおいるず、蚘事の䌝統的な区分が芋぀かりたした-これらは「Do it like like」蚘事です。これらはさたざたな䜿甚パタヌンを説明する理論䞊の倧きな蚘事ですが、実甚的な既補オプションはありたせん。 ハブのセットアップに関する蚘事がありたしたが、 DH゚ンコヌドに関する情報はなく、䞀郚のパラメヌタヌは説明されおいたせん。 蚘事ずしお芋぀かったものを泚文する䟡倀があるず思いたした。これは、httpsをサヌバヌに展開したいが、SSLの䞖界に深く入り蟌たない人に圹立ちたす。



ナレヌションは、nginxがWebサヌバヌずしお機胜するずいう事実を考慮しお行われたす1぀の堎所にphp-fpmのパラメヌタヌがありたす。



蚌明曞



すでにStartSSLから蚌明曞を取埗したした。 圌らはすでにハブで圌に぀いお曞いおいるので、私はこのステップにずどたりたせん。 最初の2、3日の間、サヌバヌ䞊の蚌明曞をチェックするブラりザヌはそれを誓うこずができたすこれはOpera 12ずFirefoxで起こりたした。明らかにStartComでは有効な蚌明曞のキャッシュはそれほど頻繁に曎新されたせん。 むンストヌルに぀いおは、以䞋で説明したす



カスタマむズオプションに぀いお



新しいバヌゞョンのNginxはすぐに䜿甚できたすが、実際には関連性がありたすが、ただ掗緎されたパラメヌタヌが必芁ですが、実際のパラメヌタヌはそれほど前に暙準構成に珟れなかったため、堎合によっおは構成内のHTTPSサヌバヌの暙準䟋は関連したせん。



䞀般に、珟圚関連する2぀の構成オプションがありたす-Forward Secrecyありずなし。 セットアップ時の違いぱンコヌディングのセットssl_ciphersディレクティブのみですが、ここではhttpsから䜕を望むかを怜蚎する䟡倀がありたす。



Forward Secrecyに぀いおは、 こちらをご芧ください 。 䞀蚀で蚀えば、䞀番䞋の行は、珟圚関連するRC4アルゎリズムの堎合、サヌバヌの秘密キヌに基づいおセッションキヌが生成されるずいうこずです。 したがっお、秘密鍵が危険にさらされた堎合、すべおのセッションを埩号化するこずができたす蚘録されおいる堎合。 DH゚ンコヌドを䜿甚する堎合、各セッションには独自のキヌのセットがあり、これらのセッションはプラむベヌトキヌにたったく䟝存したせん。 ただし、この堎合、ハンドシェむクにはるかに倚くのプロセッサ時間が費やされ、負荷ずペヌゞを開くのにかかる時間が増加したす。



ここでは、サむトでhttpsが特に必芁な理由を怜蚎する䟡倀がありたす。 倚数の蚪問者がいる堎合、DH暗号化アルゎリズムを䜿甚するず、負荷が適切に増加する可胜性がありたすHTTPSに切り替えるず、いずれにせよ増加したす。堎合によっおは、VDSなどの関皎を匕き䞊げる必芁がありたす。 ほずんどの堎合、RC4で十分ですが、倚くはRC4を「トップクラス」にしたいので、リ゜ヌスが蚱せばRC4にしたせんか。



Nginxのセットアップ



蚭定の結果ずしお、私はほがそのような構成を圢成したした。以䞋にパラメヌタヌの本質を説明したす。



httpセクションで、次を远加する必芁がありたす。

ssl_session_cache shared:SSL:10m; ssl_session_timeout 5m; ssl_prefer_server_ciphers on; ssl_stapling on; resolver 8.8.8.8;
      
      







サヌバヌセクションは、おおよそ次のようになりたす。

 server { listen 443 ssl; server_name www.site.ru; ....... keepalive_timeout 60; ssl_certificate certificate_bundled.crt; ssl_certificate_key privatekey.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "HIGH:!RC4:!aNULL:!MD5:!kEDH"; add_header Strict-Transport-Security 'max-age=604800'; ....... location ~ \.php$ { ....... fastcgi_param HTTPS on; #  php-fpm ....... } }
      
      







この䟋では、DHアルゎリズムは䜿甚されおいたせん。 前方秘密はありたせん。 ここでの改善のうち、SSLv3サポヌトを省略ssl_ciphersから削陀するこずができたす。したがっお、TLSをサポヌトしないため、IE 6以䞋はサポヌトされなくなりたす。

SSLv3を䜿甚しない堎合、この蚭定はSSLテストで100-95-100-90のスコアを䞎えたす。



パラメヌタヌを芋おみたしょう



ssl_session_cache sharedSSL10m;

ssl_session_timeout 5m;

「セッションパラメヌタを保存するためのキャッシュのタむプずサむズを蚭定したす。」Nginx.orgキャッシュはセッションキヌを再利甚するために必芁なので、新しい接続を確立するために叀いキヌが䜿甚されたす。 ハンドシェむクは再珟されたせん。 キャッシュが存圚しない堎合、すべおの芁玠でのペヌゞの読み蟌み時間が倧幅に増加するため、DHE゚ンコヌディングを䜿甚する堎合たずえばOpera 12ブラりザヌで、特に関連性が高くなりたす。 共有パラメヌタヌは、すべおのワヌクフロヌに共通のnginxキャッシュを蚭定したす。10m-キャッシュサむズ10 MB、1 MB〜4000セッション、これらの蚭定では最倧4䞇セッションたで保存可胜、5m-キャッシュのセッションタむムアりト5分 。



ssl_prefer_server_ciphers on;

「SSLv3およびTLSプロトコルを䜿甚する堎合、サヌバヌ暗号をクラむアント暗号よりも優先するように指定したす。」Nginx.org-クラむアント暗号CBCは特定の皮類の攻撃に察しお脆匱です。



ssl_stapling on;

サヌバヌがOCSP応答を添付できるようにしお、ナヌザヌのペヌゞ読み蟌み時間を短瞮したす。 ここでは、蚌明曞の有効性に぀いおの回答を意味したす倱効を確認する堎合。 ナヌザヌのセキュリティの芳点から、誰が回答を送信するかは問題ではありたせん-WebサヌバヌたたはCAサヌバヌ-結局、回答はいずれの堎合でも眲名され、応答の有効性も確認でき、回答には有効期限が含たれたす。

この機胜を機胜させるには、リゟルバヌディレクティブによっお行われるDNSサヌバヌを指定する必芁がありたす。



keepalive_timeout-説明を必芁ずせず、オフにしたり、接続を再確立するために負荷を枛らすために小さくしすぎたりしないでください。



ssl_certificateずssl_certificate_keyは、蚌明曞ファむルずその秘密鍵ファむルを指したす。 StartSSLからの蚌明曞の䟋に぀いお説明しおいるので、ここで蚌明曞をむンストヌルするためのStartSSLの指瀺に぀いお少しコメントしたす-䞀般的な蚌明曞ファむルにルヌトCA蚌明曞を远加する必芁はありたせん。デヌタ。 ファむルに個人蚌明曞ず䞭間蚌明機関の蚌明曞があれば十分です。 StartSSL蚌明曞甚のnginxの完成した蚌明曞ファむルは、次のコマンドで取埗できたす。

 cat certificate.crt sub.class1.server.ca.pem > certificate_bundled.crt
      
      





蚌明曞がcertificate.crtであり、䞭間蚌明曞がwww.startssl.com/certs/sub.class1.server.ca.pemである堎合



add_header Strict-Transport-Security 'max-age = 604800';

Strict-Transport-Secutiry-サむトにhttps経由でのみアクセスできるこずをブラりザに䌝えるヘッダヌ。 これにより、暗号化されおいない接続を介した埌続の攻撃のためにhttpバヌゞョンに戻る可胜性がなくなりたす。 ずころで、このパラメヌタヌは、ペヌゞコヌドにhttpを介した同じサむトからの「忘れられた」リ゜ヌス接続画像/スクリプト/スタむル/ ...がある堎合、ブラりザヌ自䜓がhttpsバヌゞョンに移動し、郚分的に暗号化されおいないこずを誓わないずいう点でも䟿利です接続。 もちろん、これは倖郚リ゜ヌスでは機胜したせん。 時間は1週間です。 倚くの堎合、1幎に蚭定するこずをお勧めしたすが、将来httpsを䜿甚しないこずにした堎合、これは䞀郚のナヌザヌに問題を匕き起こす可胜性がありたす。 時間は、このヘッダヌの送信ごずに曎新されたす。 サむトを蚪れるたびに。



ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

サポヌトされおいるプロトコルを瀺したす。 SSLv2およびv3には重倧な脆匱性がありたす。



ssl_ciphers "高RC4 :! aNULL :! MD5 :! kEDH";

䜿甚される暗号を瀺したす。 実際、暗号スむヌトの倉曎により、Forward Secrecyが蚭定されおいたす。 これは、nginxが提䟛する暙準セットずはKEDHパラメヌタヌのみが異なりたす。



前方秘匿



Forward Secrecyを有効にするには、たずえば次の暗号スむヌトを䜿甚できたす。

 ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
      
      







さらに、OpenSSL暗号の優先床を蚭定する必芁がありたす。

 openssl ciphers -V 'EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA256 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EDH+aRSA EECDH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS'
      
      





このオプションは、䞀郚のブラりザヌずの互換性を維持するためにRC4を䜿甚するこずを犁止したせんが、実装するのは実際には困難ですが、それ以前に脆匱性が発芋されたした 。



暗号化を匷化するには、DH暗号のパラメヌタヌのファむルを䜜成するこずでDH暗号の匷床を高めるこずができたすファむルの䜜成には時間がかかりたす。

 openssl dhparam -out dh4096.pem 4096
      
      





そしお、nginx蚭定にディレクティブを远加したす

 ssl_dhparam dh4096.pem;
      
      





これは、たずえば、Webベヌスのサヌバヌ/サヌビス管理むンタヌフェヌスに察しお実行できたすが、ハンドシェむクにはさらに時間がかかるため、通垞のサむトでは実行しないでください。



CDNサヌビスに぀いお



Forward Secrecyのセットアップ手順の説明で、少なくずもAmazon CloudFrontのCDNはサヌバヌずのDH暗号化亀換をサポヌトしおいないこずに気づきたした。RC4は少し悪いようです。 他のCDNでもすべおが完璧ずいうわけではありたせんが、個人的にはただそれらに出䌚っおいないので、䜕も蚀えたせん。



䟿利なリンク



https Webサヌバヌ蚭定のテスト

Forward SecrecyのApacheおよびnginx蚭定



All Articles