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、サーバが送ったメッセージ
を表示するまでの時間を求めよ。かかった時間はコメント
アウトしてプログラムの最後に書け。