SSLサーバー証明書の検証の流れとSSL通信開始の流れ

SSLサーバー証明書の検証の流れ

1. まずサーバーとのSSL通信を開始するにあたり、サーバーからサーバー証明書がクライアントに送られる。この証明書が認証局によって署名されたものであれば認証局の証明書も一緒に送られる。もし、その認証局がさらに他の認証局から署名を受けている場合はその上位の認証局の証明書も一緒に送られる。

2. クライアントは送られた証明書の中で最上位の認証局の証明書(ルート証明書)が信頼できるものであるか検証する。PCには事前に主要な認証局のルート証明書がインストールされているので、送られてきたルート証明書がインストールされている証明書と一致すればそのルート証明書を信頼できるものと判断する。(もし一致する証明書が無かった場合はブラウザが警告ページを表示する)

3. ルート証明書が信頼できる場合は ルート証明書の中の公開鍵を使って、サーバー証明書の電子署名を検証する。
電子署名とはサーバー証明書のハッシュ値を認証局の秘密鍵によって暗号化したもののこと。

4. クライアントは認証局の公開鍵を使って電子署名を復号しハッシュ値を取り出す。そして実際に送られてきたサーバー証明書のハッシュ値を計算し、電子署名から取り出したハッシュ値と比較する。2つのハッシュ値が一致すれば、証明書の内容は変更・改ざんされていないと判断できる。

5. 4によってサーバー証明書の信頼性が確認できたので、サーバー証明書に含まれている公開鍵を使って、その後のSSL通信の手続きを開始する。


SSL通信開始の流れ

1. クライアントが共通鍵を生成し、サーバーの公開鍵で暗号化して送信する。

2. サーバーは受け取ったデータを自分の秘密鍵で復号して共通鍵を取り出す。

3. クライアントとサーバーに共通鍵が渡ったので、その後の通信はこの共通鍵を使って暗号化・復号化する。

メールヘッダのメモ


Received: from foo.bar.com (10x10x10x5.example.net. [10.10.10.5])
by mx.google.com
with ESMTPS id ab1235dedeaollld
for <test@test.com>
Fri, 26 Aug 2016 08:28:02 -0700 (PDT)
From: hogehoge@foo.net


上記のメールヘッダを以下に解説します。

Received: from string (hostname [host IP address])
by recipient host
with protocol id message ID
for recipient
timestamp
From: sender


string
通常は送信側のMTAのホスト名を表す。任意の名前を付けられるので偽造も可能

hostname
IPアドレスからのリバースDNSルックアップ(逆引き)で得られたホスト名

host IP address
送信側MTAのIPアドレス

recipient host
通常は受信側のMTAのホスト名を表す

protocol
転送に使用されたメール転送プロトコルを表す

message ID
受取人のMTA上のログファイルで検索できるようにするための転送用の固有識別子

recipient
受取人のEメールアドレス

timestamp
MTAが受信したメッセージの日付と時間

sender
送信者のEメールアドレス。任意のアドレスを付けられるので偽造も可能。

ポイント:
メールを受信した際、真っ先に目につくであろうFromヘッダで定義された送信者のアドレスは簡単に偽造できる。同様にReceivedヘッダのfrom直後のホスト名も偽造ができる。ただし()内のホスト名は受信側MTAによるIPアドレスからのリバースDNSルックアップに基づいているので、こちらのほうが情報としては信用できる*1。
なので、from直後のホスト名と()のホスト名が食い違っている場合は、送信者がホスト名を偽っている可能性がある*2。

*1.. 受信側のMTAを悪者が管理していて名前解決に関する設定やファイルをいじくられていなければですが。。。
*2.. 正当な理由があって敢えてホスト名を変更している可能性も十分ありそうですが。。。

以上。

JavaScriptのコード内容の手っ取り早い確認方法

JavaScriptの大まかなコードの内容を手っ取り早く確認したいときは、コードのキモとなっていそうな変数や関数の中身を出力させるのが有効です。
例えば以下のようなコードがあったとします。


fojbldfd = String.fromCharCode(81, 50, 57, 117, 65, 51, 74, 104, 100, 72, 86, 115, 89, 88, 82, 112, 98, 50, 53, 122, 73, 83, 66, 84, 100, 87, 78, 106, 65, 88, 78, 122, 65, 110, 86, 115, 98, 72, 107, 103, 65, 71, 86, 106, 98, 50, 82, 108, 65, 67, 69, 61).replace(/A/g, 'Z');
eval(fojbldfd);


変数fojbldfdにゴニョゴニョと値を入れてevalで実行しているようです。変数fojbldfdの中身を出力すれば何をしようとしているのか分かりそうです。変数の出力にはdocument.writeWScript.Echo(Windows環境の場合)を使います。

■document.writeを使う場合
evalの部分をdocument.writeに書き換えます。またコード全体をscriptタグで囲って.htmlとして保存します。

<script>
fojbldfd = String.fromCharCode(81, 50, 57, 117, 65, 51, 74, 104, 100, 72, 86, 115, 89, 88, 82, 112, 98, 50, 53, 122, 73, 83, 66, 84, 100, 87, 78, 106, 65, 88, 78, 122, 65, 110, 86, 115, 98, 72, 107, 103, 65, 71, 86, 106, 98, 50, 82, 108, 65, 67, 69, 61).replace(/A/g, 'Z');
document.write(fojbldfd);
</script>

保存したhtmlファイルをブラウザで開くと変数の中身が確認できます。
browse.png

■WScript.Echoを使う場合
evalの部分をWScript.Echoに書き換えて、.jsとして保存します。

fojbldfd = String.fromCharCode(81, 50, 57, 117, 65, 51, 74, 104, 100, 72, 86, 115, 89, 88, 82, 112, 98, 50, 53, 122, 73, 83, 66, 84, 100, 87, 78, 106, 65, 88, 78, 122, 65, 110, 86, 115, 98, 72, 107, 103, 65, 71, 86, 106, 98, 50, 82, 108, 65, 67, 69, 61).replace(/A/g, 'Z');
WScript.Echo(fojbldfd);

保存したjsファイルをダブルクリックするとメッセージボックスが表示されて変数の中身が確認できます。
message.png

あるいはコマンドプロンプトでcscript.exe example.jsと打てばコマンドプロンプト上で結果を確認できます。
cmdp.png

WScript.Echoを使ったほうがコードにエラーがあった場合エラー箇所を教えてくれるので、修正がしやすいです。document.writeでブラウザ表示だと、コードにエラーがあって正しい出力結果が得られ無い場合、すぐには異常に気づかないかも。
でも、出力結果をコピペしたいときはブラウザに表示させたほうが楽です。(メッセージボックスの内容はコピペできないし、コマンドプロンプト上でコピペするのは少し面倒) 状況に応じて使い分けるのが良いかと。

ちなみに最後のbase64をデコードすると"Congratulations! Successfully decoded!"となります。

以上。

tr コマンドは便利

最近知った便利なコマンド tr

tr - translate or delete characters



tr str1 str2
str1をstr2に変換する
例)
$ echo "cat" | tr 'c' 'r'
rat

$ echo "Uryyb jbeyq" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm'
Hello world

コマンドひとつで換字できるので便利
以上

Manually insert RIGHT-TO-LEFT OVERRIDE character into the filename


67c71e8e-1599-11e7-9f20-4b75e769f3a1.png

| NEXT>>

プロフィール

トニヒコ

Author:トニヒコ
趣味は旅行と読書とマンガ。
将来の夢はコスモポリタン!

リンク・フリーです。

My hobby is traveling and reading(include manga).
My dream is to become cosmopolitan!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
スポンサード リンク
マクロミルへ登録
FC2カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR