2013年09月12日

NginxのSSL設定メモ

次の記事でMarkDownで書きなおしてみた

 


 



理由が記載されていない設定例しか見当たらなかったのでメモしておく。2013/9時点の理解。
Apacheでも名前の読替えで全て同じ設定が可能。


ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers AESGCM:SHA384:SHA256:@STRENGTH:RC4:HIGH:!EXP:!LOW:!MD5:!aNULL:!eNULL:!KRB5:!PSK:!SRP;
ssl_prefer_server_ciphers on;
ssl_stapling on;
add_header Strict-Transport-Security max-age=31536000;

暗号方式は
・RC4 > CBC (BEASTの方が重大と考える)なら、上記の通り。
・CBC > RC4 (RC4の危殆化が重大と考える)なら
ssl_ciphers HIGH:!MD5:!aNULL:!eNULL:!EXP:!KRB5:!PSK:!SRP;
・クライアントの構成から、SSLv3とRC4を無効にできるなら、
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!EXP:!KRB5:!PSK:!SRP;


ciphersの記述を細分すると、


AESGCM:SHA384:SHA256:@STRENGTH
TLSv1.2以降で導入された方式をMACでリストアップして、暗号強度順に並べている。これらに対応しているクライアントはTLSv1.2で接続しているはず。デフォルト有効ではないものの、メジャーブラウザは実装済み。
なお、
TLSv1.2:!eNULL
でも同じ結果になるが、1.0.1eより前ではTLSv1.2という一括指定は使えないようだ。


RC4:HIGH:!EXP:!LOW
BEAST未対策かつTLSv1.2非対応の古いブラウザ向けにRC4-128bitを優先する。米国輸出規制対応の弱いRC4は!EXPで排除される。(64bitのRC4が実装された時のために!LOWをいれておく)
RC4が無効化されていればそれ以外に128bit以上の暗号を使う。


!MD5
今のところ弱衝突はでていないが、MD5が必須なのはSSLv2以下のブラウザだけなので無効にして構わない。SHA1に非対応のブラウザは流石に無いと考えていい。

!aNULL:!eNULL:!KRB5:!PSK:!SRP
署名なし、暗号化なしは無効。また古い形式と事前共有など。使われることは無いだろうがssl_prefer_server_ciphers onなので念のため無効にしておく

これらのルールは

openssl ciphers -v 'ciphersuites'
で利用される順序が確認できる。





ssl_session_cache
トラフィックが少ないのでワーカー毎キャッシュを無効にして、全て共有。


ssl_stapling
OCSP応答をサーバー側にキャッシュする。最初のセッション確立までの遅延を減らせる。nginxの場合、resolverを明示的に設定が必要


Strict-Transport-Security
同じくトラフィックが少ないのでブラウザにSSLの利用を強制する。




ラベル:ssl nginx
posted by ko-zu at 22:49| Comment(0) | TrackBack(0) | セキュリティ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック