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

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

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

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

  導出和導入證書
  
  為了解釋清楚如何輸出和輸入證書,我會使用我自己的 HTTPS 服務器。這個服務器在第一部分中討論過。然后,跟著下面的內容開始:
  
  1、運行 HTTPS 服務器,像在第一部分中討論的那樣。
  
  2、運行 ReadHttpsURL1:java ReadHttpsURL1 localhost。你同樣會得到上面所述的異常。
  
  3、使用下面的 keytool 命令導出服務器證書:
  
  o 從 serverkeys 文件中導出別名為 qusay 的證書
  
  o 將導出的證書保存在 server.cert 文件中,這個文件會由 keytool 創建
  
  如你看到的那樣,我根據要求輸入了密碼。成功輸入密碼之后,服務器證書被成功的導出并保存在 server.cert 中。
  
  Prompt> keytool -eXPort -keystore serverkeys -alias qusay -file server.cert
  
  Enter keystore passWord: hellothere
  
  Certificate stored in file
  
  4、將文件 server.cert 拷貝到 ReadHttpsURL1 所在的目錄。使用 keytool 創建一個新的 keystore 并將服務器的 server.cert 證書導入其中。這里的命令示例:
  
  Prompt> keytool -import -keystore trustedcerts -alias qusay -file server.cert
  
  這個命令會產生下面那樣的輸出。它要求輸入密碼,這是一個新的密碼,用于 trustedcerts 這個 keystore 的。這個 keystore 由 keytool 創建。在輸出信息的最后,它詢問我是否愿意相信這個證書,我回答 yes。
  
  Enter keystore password: clientpass
  
  Owner: CN=localhost, OU=Training and Consulting, O=javacourses.com, L=Toronto, ST=Ontario, C=CA
  
  Issuer: CN=localhost, OU=Training and Consulting, O=javacourses.com, L=Toronto, ST=Ontario, C=CA
  
  Serial number: 3dcf988a
  
  Valid from: Mon Nov 11 06:46:18 EST 2002 until: Sun Feb 09 06:46:18 EST 2003
  
  Certificate fingerPRints:
  
   md5: 37:35:4D:3A:2B:7E:B5:09:A5:41:B3:FA:E4:3C:1D:C4
  
   SHA1: CB:7C:77:36:79:A2:37:26:E2:98:61:C2:9D:10:50:69:
  
   99:F9:B9:1B
  
  Trust this certificate? [no]: yes
  
  Certificate was added to keystore
  
  5、現在運行 ReadHttpsURL1 并告訴它哪里能找到證書。使用下面的命令:
  
  Prompt> java -Djavax.net.ssl.trustStore=trustedcerts ReadHttpsURL1 localhost
  
  這將會與你的 HTTPS 服務器聯接、校驗證書,假如正確,它會下載默認頁面 index.Html。
  
  --------------------------------------------------------------------------------
  
  注重:信任治理器負責決定遠端的證書是否值得信任。它使用下面的規則:
  
  1、假如 javax.net.sll.trustStore 系統屬性指定了信任庫,那么信任治理器會使用提供的文件來檢查證書。假如那個系統屬性存在但指定的文件不存在,那么就沒有使用任何信任庫,會拋出一個 CertificateException 異常。
  
  2、假如 javax.net.sll.trustStore 系統屬性沒有定義,那么它會去尋找默認的信任庫:
  
  o 假如在你的 java.home 目錄的 lib/security 子目錄下存在名為 jssecacerts 的信任庫,那么使用的就是它。
  
  o 假如 jssecacerts 不存在,但是 cacerts 存在 (它隨 J2SDK 一起發行,含有數量有限的可信任的基本證書),使用的就是 cacerts。
  
  在我的 windows 2000 客戶機中,java.home 目錄是 c:/Program File/java/jre1.4.1/lib/security,在上例中,假如你將 trustedcerts 更名為 jssecacerts 并將其移動到 lib/security 子目錄中,那么你以后就不需要在命令行指定 javax.net.ssl.trustStore 屬性了。
  
  假如你不知道 java.home 在哪里,這里有一小段代碼可以讓你找到它:
  
  public class FindJavaHome {
  
   public static void main(String argv[]) {
  
   System.out.println(System.getProperty("java.home"));
  
   }
  
  }
  
  --------------------------------------------------------------------------------
  
  URL 類
  
  示例代碼 1 中的 ReadHttpsURL1 使用低層的套接字打開到 SSL 服務器的連接。這樣做有一個缺點,假如不進行一番解析,我們就不能在命令行清楚的寫出像 https://www.jam.ca 這樣的 URL。這里有一個更簡單的辦法在客戶端應用程序中使用 SSL 和 JSSE。
  
  java.net.URL 類支持 HTTPS 地址。例如,下面的代碼段創建一個 HTTPS 地址并建立一個輸入流的讀入器:
  
  URL url = new URL("https://www.sun.com");
  
  BufferedReader in
  
   = new BufferedReader(new InputStreamReader(url.openStream()));
  
  是不是很簡單?我希望當你學習 Java 的新東西時,你能欣賞到它的美好之處。
  
  示例代碼 1 中的 ReadHttpsURL1 可以由下面使用了 URL 類的示例代碼 2 代替:
  
  示例代碼 2:ReadHttpsURL2.java
  
  import java.net.*;
  
  import java.io.*;
  
   public class ReadHttpsURL2 {
  
   public static void main(String argv[]) throws Exception {
  
   if(argv.length != 1) {
  
   System.out.println("Usage: java ReadHttpsURL2 ");
  
   System.exit(0);
  
   }
  
   URL url = new URL(argv[0]);
  
   BufferedReader in
  
   = new BufferedReader(new InputStreamReader(url.openStream()));
  
   String line;
  
   StringBuffer sb = new StringBuffer();
  
   while ((line = in.readLine()) != null) {
  
   sb.append(line);
  
   }
  
   in.close();
  
   System.out.println(sb.toString());
  
   }
  
  }
  
  假如你想試試 ReadHttpsURL2,執行它的命令和上面討論的類似。注重,無論如何,既然我們使用 URL 類,你就能在命令行指定 URL,包括協議的名稱。這里是一個例子:
  
  Prompt> java ReadHttpsURL2 https://localhost

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 琼中| 西青区| 宾阳县| 河南省| 华宁县| 乐清市| 调兵山市| 新宾| 齐河县| 措勤县| 拜泉县| 昌乐县| 天台县| 连江县| 鲁山县| 西华县| 巧家县| 呼伦贝尔市| 宣汉县| 夹江县| 固始县| 稷山县| 白银市| 江口县| 汾阳市| 天长市| 姚安县| 勃利县| 新田县| 高碑店市| 涟源市| 郴州市| 堆龙德庆县| 资阳市| 贵德县| 元谋县| 闽清县| 商城县| 大宁县| 普兰店市| 昌邑市|