熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

在 WAS 中使用 Java 安全套接字擴展(圖)

2013-11-23 19:53:56  來源: Java高級技術 

  本文提出了 IBM? JSSE(Java? Secure Socket ExtensionJava? 安全套接字擴展)的配置問題探討了密鑰庫和信任庫並且對於如何在 IBM WebSphere? Application Server 環境下處理這些重要的 JSSE 元素提出了的建議
  
  引言
  
  Java 安全套接字擴展(Java Secure Socket ExtensionJSSE)是將低級編程接口封裝到安全套接字層(Secure Socket LayerSSL)協議及其相應的標准傳輸層安全性(Transport Layer SecurityTLS)協議中的 Java 標准IBM JSSE 是 JSSE 框架的 Java 實現它支持 SSL V 和 V 以及 TLS V將 JSSE 這樣架構以便其能夠提供兩套接口一套被稱為服務提供方接口(Service Provider InterfaceSPI)而另一套是應用程序編程接口(Application Programming InterfaceAPI)
  
  那些提供特定實現的功能插件使用提供的程序接口(本質上是接口中的插件)通常應用程序開發人員僅處理 API他們可以編寫可移植的代碼該代碼僅依賴於標准的公共 API 中公布的方法IBM JSSE 實現也包括 IBM JSSE 加密提供方
  
  重要的是開發人員應該遵循最佳的編程實踐來啟用應用程序的可移植性只要沒有將提供應用程序的特定信息的用法嵌入或強制編碼到應用程序中JSSE API 就可以進行移植IBM 沒有聲明與其它 JSSE 提供方的互操作性IBM 開發實驗室沒有執行任何正式的測試
  
  分離 API 和 SPI 接口的目的在於保護來源於程序提供者的應用程序以便達到可移植性但每個程序提供者所提供的功能可能不必與其它提供的功能相匹配IBM JSSE 包括了 IBM 的提供方而其他供應商擁有自己的提供方當使用 WebSphere Application Server 時例如我們重在 IBM 自己的提供方因此應用程序代碼假設任何特殊的提供方都是不可移植的一個公共實例是顯式地裝載了 comsun* 類的應用程序代碼由於 comsun* 不是 JSSE(或者對於那種情況是 JSE)的一部分所以這樣的代碼是不可移植的當您開發您的代碼時應該盡量避免程序提供者所特有的依賴我們此處的實例說明了這種方法
  
  簡化 JSSE 編程很大程度上是由於高級別的抽象它提供了關於標准套接字的編程接口這使得在兩個希望使用 TCP/IP 協議上的傳輸層安全性來進行消息傳遞的終端之間建立網絡連接變得非常容易由 JSSE 提供的安全性服務是由傳輸層消息完整性可靠性(加密)服務器驗證以及可選的客戶端驗證組成
  
  在本文中我們提出了 IBM JSSE 的配置問題探討了密鑰庫和信任庫並且推薦了在 WebSphere Application Server 環境下處理這些重要的 JSSE 元素的方法隨後我們給出了 JSSE 編程模型並且說明當訪問 HTTPS 上的可用資源時它是多麼簡單最後我們說明了怎樣在單一應用程序中同時使用多重密鑰庫/信任庫
  
  SSL 是由 Netscape Communications Corporation 於 年開發的而 TLS V 是由 Internet Engineering Task Force(IETF)定義的標准它基於 SSL V並且在使用的加密算法上與其有些許的不同例如SSL 使用 Message Authentication Code(MAC)算法來生成完整性校驗值而 TLS 應用密鑰的 Hashing for Message Authentication Code(HMAC)算法
  
  配置及安裝 IBM JSSE我需要做什麼嗎?
  
  WebSphere Application Server V(以及後續的)和 WebSphere Studio V 一起傳輸 ibmjssejar(支持 JSSE 版本)及其相關的 certpathjar因此IBM JSSE 由運行在 WebSphere Application Server 環境下的應用程序自動地使用重申WebSphere Application Server 包括了 JSSE 並完全地未經優化的支持它您的部分中無需進一步的安裝事實上禁止替換其他來源的 JSSE 或 JCE 實現(您不能忽略核心的運行函數當然您可以擁有額外的提供方但不能替換那裡已存在的提供方)您必須確保 JSSE 及其支持的 JAR 文件例如 certpathjar在開發過程中位於您的類路徑上(在運行時它們常常位於類路徑上)certpathjar 是一個包包含證書路徑結構及 JSSE 運行時需要的驗證功能以便建立證書信任路徑您無需對 certpathjar API 編程來建立 SSL/TLS 通信通道但 JSSE 將會使用它
  
  IBM JSSE 提供了 JSSE 功能用於您的 WebSphere Application Server 環境以及部署過的應用程序這是靜態地設置在 javasecurity 配置文件中的該文件位於您的 WAS 安裝路徑下的 JDK 目錄中下面是 Windows? 系統的 javasecurity 文件中未經優化的缺省提供方的清單注意不同平台之間的提供方的名稱是一樣的然而排序可能是不同的無論何種平台您的用於 WebSphere Application Sever 的未經優化的 JSSE 提供方都是 IBMJSSEProvider
  
  #
  # List of providers and their preference orders
  #
  securityprovider=sunsecurityproviderSun
  securityprovider=comibmcryptoproviderIBMJCE
  securityprovider=comibmjsseIBMJSSEProvider
  securityprovider=comibmsecuritycertIBMCertPath
  securityprovider=comibmcryptopkcsproviderIBMPKCS
  
  您無需更改其中的任一個如果您很好奇那麼此處存在大量的提供方大多數都與 JSSE 無關與 JSSE 相關的提供方只是 IBMJSSEProviderIBMJCE 以及 IBMCertPath後兩者由 IBMJSSEProvider 隱含地使用來進行證書處理及加密操作
  
  信任庫和密鑰庫它們是什麼以及我為何關注它們?
  
  SSL 協議基於公鑰密碼加密密鑰成對地出現在公鑰密碼中它們是在數學上是相關的但無法由一個推知另一個這對加密密鑰由私有密鑰和公有密鑰(私有公共)組成的私有密鑰一直處於其所屬實體的保護之下注意所有者確實擁有這對加密密鑰但公共密鑰如同它的名稱所示可以為眾所周知或至少自由地分散到與公共/私有密鑰對通信的實體中公鑰密碼啟用的安全性服務是基於這樣的消息解密機制即共有密鑰只能通過相應的私有密鑰才能解密反之亦然這樣如果使用實體的公鑰加密消息那麼可以保證只有該實體能夠解密此消息這時會在腦海中立即出現一個問題即怎樣確保正在使用的公鑰的確被綁定到合法實體上而沒有綁定到其它實體上在此 Public Key Infrastructures(PKI)開始起作用了(請見參考資料)
  
  
客戶端和服務器信任庫/密鑰庫間的關系
   

  公有密鑰分布於名為公鑰證書(PKC)的容器中這些是由某一簽名者(通常是 Certificate Authority但公鑰可以是自簽名的)數字化地簽署的數字簽名標志原始的真實性的驗證要記住的一點是相信計算機安全一定能通過計算的方法驗證為了驗證公鑰證書是合法的我需要檢驗發出該簽名的簽名者相反這個過程是基於簽名者的公有密鑰的
  
  在這裡使用信任庫當將 JSSE 用於 SSL 通信時需要在本地存儲中維護一套信任的簽名者的證書由此得名信任庫例如由 JSSE 運行時使用的客戶端信任庫為了驗證試圖連接到服務器的客戶端確實使用合法的證書(由信任的簽名者發出的)與服務器交互因此服務器證書的簽名者必須持有保存在客戶端信任庫中的 PKC 闡明了客戶端和服務器信任庫/密鑰庫間的關系
  
  出於同樣的機制服務器必須本地保護它的私有密鑰並且使其能夠訪問 JSSE 運行時在此處使用密鑰庫密鑰庫與信任庫有相同的格式它只包含了不同的密鑰實際上專業術語密鑰庫通常表示信任庫或密鑰庫
  
  總之信任庫包含了簽名者的證書該簽名者在使用信任庫的環境中得到信任另一方面密鑰庫維護了實體的私有密鑰及其相應的 PKC例如當服務器面向客戶端進行自身驗證時它需要從其密鑰庫中檢索它的私有密鑰來與加入客戶端的 SSL 握手所以應該確實地重視信任什麼簽名者也就是說使用信任庫的哪些內容IBM 提供的缺省信任庫包括了一些公認的且廣泛信任的 Certificate Authorites(CA)在這裡一種好的實踐是周期性地浏覽您的信任庫並且作出您關於其內容可信性的判斷——可能刪除一些 CA
  
  現在我們已經知道信任庫是什麼以及密鑰庫是什麼讓我們來了解一下使用 IBM JSSE 在 WebSphere Application Server 環境中是如何定義它們的
  
  如何指定密鑰庫和信任庫
  
  為了打開 JSSE 的連接您必須在信任庫和密鑰庫中擁有合適的證書以及私有密鑰您需要配置 JVM 來使用您的信任庫或密鑰庫然而如果您僅執行服務器驗證(就是說客戶端使服務器的證書生效但不允許反向)那麼您只需要信任庫
  
  如果您在沒有明確地指定信任庫或密鑰庫的情況下創建 SSL 連接那麼 JSSE 運行時將會使用缺省對於 WebSphere Application Server 來說意味著 cacerts 文件被用作缺省的信任庫(位於 WAS 安裝目錄下的 java/jre/lib/security 中)
  
  如果您聯系的站點使用由公認的 CA 發出的證書那麼 IBM 提供的缺省證書很可能已經包含了您需要的信息您可以使用 IBM 提供的 iKeyman 工具(WebSphere Application Server 安裝後自動可用)打開 cacerts 文件來確定 JDK 中包含什麼證書
  
  如果您訪問的站點沒有使用由 CA 發出的證書CA 被包含在 WebSphere Application Server 中那麼您需要獲得它們的簽名證書並且將其添加到信任庫中我們推薦您不要修改現有的 JDK 文件而是使用 iKeyman 創建新的信任庫然後您需要配置 WebSphere Application Server 運行時來使用該信用庫
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27642.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.