国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用J2SE 1.4 進行 Internet 安全編程(一)

2019-11-18 12:22:26
字體:
來源:轉載
供稿:網友

  第二部分:客戶端
  
  java 安全套接擴展 (Java Secure Socket Extension, JSSE) 使 Internet 安全通信成為現實。它是 SSL 3.0 (Secure Socket Layer) 及 TLS 1.0 (Transport Layer Security,由 SSL 3.0 改善而來) 的框架和實現。這個包讓 Java 開發人員能夠開發安全的網絡應用;為基于 TCP/ip 的何應用協議,如 HTTP、FTP、Telnet、或者 NTTP,在客戶端和服務器端之間建立安全的數據通道。
  
  在這篇文章的第一部分 (服務器端),作者已經具體說明了 SSL 和 JSSE,并且說明了如何開發服務器端支持 SSL 應用程序。那一部分中我們開發了一個 HTTPS 服務器,這是一個非常有用的應用程序,在這一部分中同樣會用到它。
  
  在這篇文章涉及到客戶端的內容,它首先簡述 JSSE,然后會做這樣一些事情
  
  l 在客戶端使用 JSSE API
  
  l 一步步的開發一個支持 SSL 的客戶端應用程序
  
  l 開發簡單的支持 SSL 的客戶端應用程序
  
  l 從服務器端導出證書并在客戶端導入
  
  l 開發一個支持 SSL 的網頁瀏覽器
  
  JSSE
  Java 安全套接擴展 (JSSE) 提供了 SSL 和 TLS 協議的框架及實現。JSSE 將復雜的、根本的加密算法抽象化了,這樣就降低了受到敏感或者危險的安全性攻擊的風險。正如你在本文中看到的那樣,由于它能將 SSL 無縫地結合在應用當然,使安全應用的開發變得非常簡單。JSSE 框架可以支撐許多不同的安全通信協議,如 SSL 2.0 和 3.0 以及 TLS 1.0,但是 J2SE v1.4 只實現了 SSL 3.0 和 TLS 1.0。
  
  用 JSSE 編寫客戶端應用程序
  
  JSSE API 提供了擴充的網絡套接字類、信用和密匙治理,以及為簡化套接字創建而設計的套接字工廠框架,以此擴充 java.security 和 java.net 兩個包。這些類都包含在 javax.net 和 javax.net.ssl 包中。
  
  javax.net.sll.SSLSocketFactory 類是一個創建安全套接字的對象工廠??梢酝ㄟ^下面兩種方法獲得 SSLSocketFactory 的實例:
  
  1、調用 SSLSocketFactory.getDefault 來獲得默認的工廠。默認的工廠被配置為只答應服務器端驗證 (不答應客戶端驗證)。注重許多電子商務網站不需要客戶端驗證。
  
  2、使用指定的配置來構造一個新的工廠 (這不在本文講述的范圍內)。
  
  建立 SSLSocketFactory 實例之后,你就可以通過 SSLSocketFactory 實例的 createSocket 方法創建 SSLSocket 對象了。這里有一個例子,該例通過 SSL 端口 443 (這是 HTTPS 的默認端口) 創建套接字并連接到 Sun 的 WWW 服務器。
  
  // Get a Socket factory
  
  SocketFactory factory = SSLSocketFactory.getDefault();
  
  // Get Socket from factory
  
  Socket socket = factory.createSocket("www.sun.com", 443);
  
  使用低層的 SSL 套接字
  
  現在,讓我們看一個使用低層套接字在 HTTPS 服務器上打開一個 SSL 套接字連接的完整例子。在這個例子中,打開了一個到 HTTPS 服務器的 SSL 套接字連接,并且讀入默認文檔的內容。示例代碼 1 展示了這個應用程序,其中用于打開 SSL 套接字的代碼已經加黑顯示了。你將會看到,應用程序中其余代碼就是常規的輸入/輸出流代碼。
  
  代碼示例 1:ReadHttpsURL1
  
  import java.net.*;
  
  import javax.net.*;
  
  import javax.net.ssl.*;
  
  public class ReadHttpsURL1 {
  
   static final int HTTPS_PORT = 443;
  
   public static void main(String argv[]) throws Exception {
  
   if (argv.length != 1) {
  
   System.out.  
   System.exit(0);
  
   }
  
   // Get a Socket factory
  
   SocketFactory factory = SSLSocketFactory.getDefault();
  
   // Get Socket from factory
  
   Socket socket = factory.createSocket(argv[0], HTTPS_PORT);
  
   BufferedWriter out
  
   = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
  
   BufferedReader in
  
   = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  
   out.write("GET / HTTP/1.0/n/n");
  
   out.flush();
  
   String line;
  
   StringBuffer sb = new StringBuffer();
  
   while((line = in.readLine()) != null) {
  
   sb.append(line);
  
   }
  
   out.close();
  
   in.close();
  
   System.out.println(sb.toString());
  
   }
  
  }
  
  用這個應用程序進行實驗
  
  1、拷貝 ReadHttpsURL1 類的代碼并粘貼到一個新文件中,將該文件改名為 ReadHttpsURL1.java,并保存在一個你指定的目錄下。
  
  2、使用 javac 編譯 ReadHttpsURL1.java。
  
  3、運行 ReadHttpsURL1 并提供一個域名作為參數,如:
  
  Prompt> java ReadHttpsURL1 www.sun.com
  
  幾秒種后,你會看到許多 Html 代碼顯示在屏幕上。注重,即使我們提供的是域名 www.sun.com,我們打開的連接也是 https://www.sun.com,這是因為我們使用的端口號 443 是 HTTPS 的默認端口號。
  
  再試試另一個例子,如:
  
  Prompt> java ReadHttpsURL1 www.jam.ca
  
  這次運行會拋出如下所示的異常,你能猜到是為什么嗎?
  
  Exception in thread "main" javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Couldn't find trusted certificate at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.a(DashoA6275)
  
  緣于一個很好的理由,它不能運行——因為遠端的服務器發送了一個客戶端不熟悉的證書。我在本文的第一部分提到過,當客戶端連接服務器的時候,服務器發送它的證書到客戶端請求驗證。這樣,第一個例子中,你進入了 www.sun.com,服務器的確發送了證書,但 Java 檢查了默認的證書庫并認出了這個證書是由可信任的 CA 產生的,默認情況下,Java 信任這個 CA。第二個例子中,你進入的是 www.jam.ca,那個網端的證書不是它自己產生的,就是由一個 Java 不知道的 CA 產生的,因此不受信任。
  
  
  注重,假如系統時鐘沒有設置正確,那么它的時間就可能在證書的有效期之外,服務器會認為證書無效并拋出 CertificateException 異常。
  
  為了讓示例正確運行,你得從 www.jam.ca 導入證收到 Java 信任的證書庫中。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 康平县| 龙山县| 印江| 万载县| 佛冈县| 绥棱县| 治多县| 磴口县| 临西县| 碌曲县| 彭泽县| 桂阳县| 永登县| 昌黎县| 凉山| 海门市| 缙云县| 栖霞市| 嘉定区| 枞阳县| 贡嘎县| 元谋县| 内黄县| 文水县| 岑巩县| 闽侯县| 永定县| 惠水县| 东丰县| 辰溪县| 沐川县| 九台市| 镇江市| 东明县| 古丈县| 松原市| 兖州市| 专栏| 海城市| 中阳县| 北安市|