どうも、cloudapckかっぱ@inokara)です。

はじめに

OpenSSL の Cipher 周りについて調べたのでちょいメモ


参考


ウェブサーバーの暗号アルゴリズムの選び方

ウェブサーバの暗号アルゴリズムの選び方の一章をまとめました。

https のウェブサイトが表示されるまで

  1. ブラウザからサーバーに https のリクエスト
  2. ブラウザとサーバー間で使用する暗号化アルゴリズムを決定
  3. サーバーからブラウザに SSL サーバー証明書と公開かぎを送付
  4. ブラウザからプリマスターシークレットを送付してブラウザとサーバー間で共通鍵を生成
  5. ブラウザとサーバーは共通鍵を用いてコンテンツを暗号化して送受信

使用する暗号化アルゴリズムの決定メカニズム

  1. クライアントがサーバーに SSL 通信をリクエストする時にサーバーへ利用可能な暗号アルゴリズムの一覧を送付
  2. サーバーはその中空使用するアルゴリズムを選択、決定
  3. サーバーは SSL サーバー証明書と利用暗号アルゴリズムをクライアントに送付
  4. クライアントはサーバーから受信した情報に従って、アルゴリズムを適用する

そして、暗号(化)アルゴリズムの組み合わせが 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 周りのメモ