Nginxおよびhttps。 クラスA +を取得します

画像



最近、私はそのようなサービスがあることを思い出しました-StartSslは、無料の個人使用のために信頼された証明書をドメイン所有者に配布します。 はい、週末は無料でした。 一般に、SSLラボでチェックインするときにA +の評価を取得し、SSL切断の最新のバグから身を守るために、nginxでHTTPSを構成する方法を書きます。



それでは始めましょう。 すでにStartSslに登録し、個人小切手に合格し、切望されている証明書を受け取っていると仮定します。 まず、最終的な構成を公開し、その後、分析します。



ここに私が得たものがあります:



server { server_name dsmirnov.pro www.dsmirnov.pro; listen 80; return 301 https://dsmirnov.pro$request_uri; } server { listen 443 ssl spdy; server_name dsmirnov.pro; resolver 127.0.0.1; ssl_stapling on; ssl on; ssl_certificate /etc/pki/nginx/dsmirnov.pro.pem; ssl_certificate_key /etc/pki/nginx/dsmirnov.pro.clean.key; ssl_dhparam /etc/pki/nginx/dhparam.pem; ssl_session_timeout 24h; ssl_session_cache shared:SSL:2m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=31536000;"; add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:; report-uri /csp-report"; }
      
      





最初のセクションでは、すべてが明確であるように見えます。URIを使用したhttpを介した入力は、同じURIでhttpsスキームにリダイレクトされます。



httpsのサーバーセクションの解析を始めましょう。 ディレクティブlisten 443 ssl spdy; すぐにspdyをオンにします。 写真の違いは次のとおりです。



画像



次のステップは、ssl_stapling有効にすることです。 -サーバーがOCSP応答を添付できるようにすることで、ユーザーのページ読み込み時間を短縮します。 証明書チェーン(ドメイン-中間認証センター-ルート認証センター)には3〜4レベルを含めることができます。 そして、各レベルで、ブラウザーは接続を確立し、証明書を受け取る必要があります。 すべての証明書(中間証明書を含む)を一度に送信できます。これは、証明書チェーンが1つのパケット転送に収まるようにTCP送信ウィンドウが設定されたものです)、ブラウザーはチェーン全体をローカルで確認し、ルート証明書のみを要求します(ほとんどの場合は既にオンになっています)クライアント)。 この関数が機能するためには、リゾルバーを記述することが不可欠です-私は自分のDNSサーバーを上げたので、値として127.0.0.1を指定します。8.8.8.8を指定できますが、最近多くの人が文句を言っています。 ssl onとは何ですか。 言うのは意味がないと思います。



次に、 ssl_certificateおよびssl_certificate_keyディレクティブは、StartSslを介して受信した証明書へのパスを指定します。 すでに3つのファイルがあります:domain.ru.key、domain.ru.crtおよびsub.class1.server.ca.pem。 (私の場合)/ etc / pki / nginxのキーをコピーします。



nginxのpemファイルはCA証明書とマージする必要があることを忘れないでください(3x-2ファイルから取得する必要があります)。



 cp domain.ru.key /etc/pki/nginx cat domain.ru.crt sub.class1.server.ca.pem > /etc/pki/nginx/domain.ru.pem
      
      





ssl_dhparam /etc/pki/nginx/dhparam.pemについて; -これは、Forward Secrecyが機能するために必要です。 直接秘密とは、第三者がセッションキーを認識すると、このキーによってのみ保護されているデータにのみアクセスできることを意味します。 完全な直接秘密を保持するために、送信されたデータの暗号化に使用されるキーを使用して追加のキーを取得しないでください。 また、送信データの暗号化に使用されるキーが他のキーマテリアルに基づいて取得(派生)された場合、このマテリアルは他のキーの取得に使用しないでください。



次のようなキーを生成できます。



 openssl dhparam -out /etc/pki/nginx/dhparam.pem 4096
      
      





さらに簡単な設定ssl_session_timeout 24h; ssl_session_cache shared:SSL:2m ;,これは特別な説明を必要としません-セッションの有効期限とキャッシュストレージに割り当てられたメモリのサイズ-私は小さなブログを持っているので、2 MBで十分です。



さらに-重要なパラメーターssl_protocols TLSv1 TLSv1.1 TLSv1.2; およびssl_ciphers kEECDH + AES128:kEECDH:kEDH:-3DES:kRSA + AES128:kEDH + 3DES:DES-CBC3-SHA :! RC4 :! aNULL :! eNULL :! MD5 :! EXPORT :! LOW :! SEED :! CAMELLIA :!アイデア:!PSK :! SRP :! SSLv2; -ここでは、TLSのみが必要であることを示し、2行目ではすべてのSSLを赤熱鉄で焼きます。 最新のSSLファイルに照らして、アドバイスすることは非常に重要です。 さて、ディレクティブのssl_prefer_server_ciphers; nginxにこれを厳密に順守するように強制します。



ディレクティブadd_header Strict-Transport-Security "max-age = 31536000;"; 私のドメインのこれらのセキュリティ要件のために覚えておくべき量をブラウザに伝えます。 この場合、1年。 ところで、次のようなディレクティブを記述した場合: add_header Strict-Transport-Security“ max-age = 31536000; includeSubDomains; プリロード "; 、これらの条件はドメインの3番目以上のレベルのすべてのドメインに適用されます。 ここで注意してください! もともとこの方法で説明しましたが、StartSslは限られた数のサブドメインに対して証明書を発行するため、さまざまな管理者にサービスを提供し、信頼できる証明書が発行されたサブドメインだけが機能するサブドメインにさえ到達できませんでした。 したがって、私は自分で最初のオプションを選択しました。



-add_header Content-Security-Policy-Report-Only“ default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https:data:; font-src https:data:; report-uri / csp-report "; -このヘッダーのプロパティについてはまだ詳しく調査していません。 コンテンツセキュリティポリシー(CSP)は、HTTPヘッダーのContent-Security-PolicyおよびContent-Security-Policy-Report-Onlyを定義する新しい標準で、さまざまなリソースをロードできるホストのホワイトリストをブラウザーに通知します。



画像



一時的に、私は彼らからのCSPの使用に関するYandexの記事からこの行を取りました。詳細については、 http//www.html5rocks.com/en/tutorials/security/content-security-policy/を参照してください



それがすべてのようです。 自分や他の人の作品の結果を確認できるいくつかのリンク:



1. SPDY Check私の作業の結果です



2. SSL Labs-サーバーの保護品質を確認します



幸運を祈ります!



All Articles