どうも、cloudapck の かっぱ(@inokara)です。
はじめに
OpenSSL の Cipher 周りについて調べたのでちょいメモ
参考
ウェブサーバーの暗号アルゴリズムの選び方
ウェブサーバの暗号アルゴリズムの選び方の一章をまとめました。
https のウェブサイトが表示されるまで
- ブラウザからサーバーに https のリクエスト
- ブラウザとサーバー間で使用する暗号化アルゴリズムを決定
- サーバーからブラウザに SSL サーバー証明書と公開かぎを送付
- ブラウザからプリマスターシークレットを送付してブラウザとサーバー間で共通鍵を生成
- ブラウザとサーバーは共通鍵を用いてコンテンツを暗号化して送受信
使用する暗号化アルゴリズムの決定メカニズム
- クライアントがサーバーに SSL 通信をリクエストする時にサーバーへ利用可能な暗号アルゴリズムの一覧を送付
- サーバーはその中空使用するアルゴリズムを選択、決定
- サーバーは SSL サーバー証明書と利用暗号アルゴリズムをクライアントに送付
- クライアントはサーバーから受信した情報に従って、アルゴリズムを適用する
そして、暗号(化)アルゴリズムの組み合わせが Ciipher ってことですな。
Cipher とは
そもそも Cipher とは…
一言で言うと…「利用する暗号アルゴリズムの組み合わせ」。
「Cipher Suite」とは、SSL 通信に使用するこの暗号アルゴリズムの組み合わせのことです。SSL 通信でクライアントから送付される対応可能なアルゴリズムの一覧には、この組み合わせ、Cipher Suite が記載されています。
サポートされている Cipher Suite を確認する
openssl コマンドで確認出来ます。
openssl ciphers -v
出力順序が優先順位となります。以下、Amazon Linux で実行した結果です。
$ openssl ciphers -v | head -10 ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384 ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384 ECDHE-RSA-AES256-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA1 ECDHE-ECDSA-AES256-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA1 DHE-DSS-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=DSS Enc=AESGCM(256) Mac=AEAD DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256 DHE-DSS-AES256-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=AES(256) Mac=SHA256
強度の強い順番に出力されます。また、強度の強い順番に出力したい場合には以下のように実行します。
openssl ciphers ALL:@STRENGTH -v | head -10
優先度云々
ウェブサーバの暗号アルゴリズムの選び方の転載ですが…
クライアントから送付されるアルゴリズムは、優先度の順に並んでいます。サーバは、一覧のなかからサーバ側で設定している優先度の一番高いアルゴリズムを選択します。
とのことです。
〆
基礎的な内容なのかもしれませんが、このあたりはちゃんと把握しておいた方が良いかなと思いました。色々と勉強になります…。
元記事はこちらです。
「OpenSSL の Cipher 周りのメモ」