Transcript Document

JSSE – 暗号通信
Java Secure Socket Extension
3ADM3225 高橋 佑介
準備



フォルダ名
JSSE
ファイルのコピー元
~coffee/Java/JSSE2/*
コマンドプロンプトとTTSSHを起動しておい
てください
テキスト


http://www.cs.dm.utokai.ac.jp/~coffee/text-JSSE.pdf
(修正版)
http://www.cs.dm.utokai.ac.jp/~coffee/JSSE.ppt
JSSE
ネットワーク上のデータは簡単に不正アク
セスできてしまう。
例 盗聴、なりすまし・・・

JSSE
 不正アクセスを防止する、暗号化通信を行
うプロトコル、SSLとTLSを提供。
SSL (Secure Socket Layer)


SSLは公開鍵暗号や秘密鍵暗号、デジタ
ル証明書、ハッシュ関数などのセキュリテ
ィ技術を組み合わせ、データの盗聴や改ざ
ん、なりすましを防ぐことができる。
ハンドシェークプロトコル
サーバとクライアントが通信を行う前に認
証や暗号化アルゴリズムの交渉をする。
SSLClient.java
インポート SSLを使うために必要
 Import javax.net.ssl.*;
ソケットの作成
 SSLSocketFactory fact
=(SSLSocketFactory)SSLSocketFactory.getDefault();

SSLSocket s = (SSLSocket)fact.createSocket(host,
port);
SSLServer.java
インポート

Import javax.net.ssl.*;
サーバソケットの作成

SSLServerSocketFactory fact =
(SSLServerSocketFactory)SSLServerSocketFactory.getDefault();

SSLServerSocket ss =
(SSLServerSocket)fact.createServerSocket(port);
クライアントの接続要求を待つ

SSLSocket s = (SSLSocket)ss.accept();
実習

SSLServer.javaとSSLClient.javaを実行せ
よ。
SSLServer.javaのエラー


利用できる証明書が見つからなかった。
SSLは通信をする前にサーバの認証を行う
ため、証明書が必要。
CA(認証局)
CA
クライアント
サーバ
CAはサーバの公開鍵に署名する。
署名
キーストア、トラストストア


キーストア
サーバ用
自分の証明書を保存しておくところ。
トラストストア
クライアント用
信頼するサーバの証明書を保存するとこ
ろ。
keytool

鍵と証明書を管理するためのユーティリティ
keytoolのオプション
-genkey
鍵の生成
-alias
証明書や鍵の名前
-keyalg
暗号方式
-keystore キーストア
使い方
keytool -genkey -alias self -keystore test ・・・
動作モードの指定
オプション
最初に動作モードの指定、それより後はオプション
手順
クライアント
トラストストア
サーバ
キーストア
1.キーストアの作成
2.キーストアから証明書をエクスポート
3.証明書をトラストストアへインポート
実習


Keytoolを用いてキーストアを作り、作った
キーストアを調べよ。
作ったキーストアから証明書を取り出し、ト
ラストストアにインポートせよ。
パスワードは忘れないように!
実習



テキストの例を参考にSSLServer.javaと
SSLClient.javaを実行せよ。
SSLServer
キーストアとキーストアのパスワードを指定する。
SSLClient
トラストストアとトラストストアのパスワードを指定
する。
演習


EchoClientとEchoServerを動作させた後、SSLで
セッションをはるようにコードを変更せよ。
ファイル:
SSLEchoClient.java,SSLEchoClient.java
EchoClientはメッセージを送信し、EchoServerは
そのままメッセージを送り返している。
宿題



サーバに数値を送るクライアント
SSLChallengeClient.javaと、送られた入力値が大きいか
小さいか送り返すサーバ SSLChallengeServer.javaを作
れ。
SSL化したコードにメッセージ入力機能を付け、暗号通信
チャットの出来る
SSLChatClient.java、SSLChatServer.javaを作れ。
Client.javaとSSLClient.java、サーバが送ったメッセージ
を表示するまでの時間を求めよ。かかった時間はコメント
アウトしてプログラムの最後に書け。