利用 JSSE 和 JCE 程式設計介面來保護傳輸安全

您可以使用 Java™ Secure Socket Extension (JSSE) 和 Java Cryptography Extension (JCE) 程式設計介面,來進一步瞭解傳輸安全的詳細資訊。 在本主題內,有 IBM® 版 Java Cryptography Extension Federal Information Processing Standard (IBMJCEFIPS) 的說明。

Java Secure Socket Extension

JSSE 提供 WebSphere® Application Server的傳輸安全。 JSSE 提供應用程式設計介面 (API) 架構,以及 Secure Sockets Layer (SSL) 和傳輸層安全 (TLS) 通訊協定的 API 實作,包括資料加密、訊息完整性和鑑別的功能。

JSSE API 已整合至 Java 2 SDK Standard Edition (J2SDK) 第 5 版。 JSSE API 的 API 套件是 javax.net.ssl.*。 使用 JSSE API 的文件可在 J2SE 6 API 文件中找到,該文件位於 http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html

WebSphere Application Server隨附的 Java 2 SDK 第 5 版隨附數個 JSSE 提供者。 IBMJSSE 提供者用於舊版 WebSphere Application Server 。

如需新 IBMJSSE2 提供者的相關資訊,請檢閱位於 https://www.ibm.com/developerworks/java/jdk/security/60/的說明文件。

自訂 Java Secure Socket Extension

您可以插入 Cryptography Package Provider、 X509Certificate 及 HTTP 通訊協定的不同實作,或指定不同的預設金鑰儲存庫檔、金鑰管理程式 Factory 及信任管理程式 Factory ,來自訂 JSSE 的一些層面。 下表彙總可以自訂哪些層面、預設值為何,以及用來提供自訂作業的機制。
表 1. 可自訂項目 您可以自訂下列主要方面:
可自訂的項目 預設值 如何自訂
X509Certificate IBM 中的 X509Certificate 實作 cert.provider.x509v1 安全內容
HTTP 通訊協定 來自 IBM 的實作 java.protocol.handler.pkgs 系統內容
加密法套件提供者 IBMJSSE2 安全內容檔中的 security.provider.n= 行。 請參閱說明。
預設金鑰儲存庫 * javax.net.ssl.keyStore 系統內容
預設信任儲存庫 jssecacerts (如果存在的話)。 否則, cacerts * javax.net.ssl.trustStore 系統內容
預設金鑰管理程式 Factory IbmX509 ssl.KeyManagerFactory.algorithm 安全內容
預設信任管理程式 Factory IbmX509 ssl.TrustManagerFactory.algorithm 安全內容

對於您可以透過設定系統內容來自訂的層面,請使用 Java 指令的 -D 選項靜態設定系統內容。 您可以利用管理主控台來設定系統內容,或在程式碼中呼叫 java.lang.System.setProperty 方法來動態設定系統內容: System.setProperty(propertyName, "propertyValue")。

對於您可以透過設定 Java 安全內容來自訂的層面,請靜態指定 java.security 內容檔中的安全內容值。 安全內容是 propertyName=propertyValue。 透過呼叫 java.security.Security.setProperty 方法。

java.security 內容檔案位於下列目錄:

[AIX Solaris HP-UX Linux Windows]app_server_root/java/jre/lib/security 目錄。

[z/OS]app_server_root/properties 目錄。

[IBM i]profile_root/properties 目錄。

JSSE 的應用程式設計介面

JSSE 提供標準應用程式設計介面 (API) ,可在 javax.net 檔、 javax.net.ssl 檔及 javax.security.cert 檔的套件中找到。 API 涵蓋:
  • Socket 和 SSL Socket
  • 用來建立 Socket 和 SSL Socket 的 Factory
  • 安全 Socket 環境定義,作為安全 Socket Factory 的 Factory
  • 金鑰和信任管理程式介面
  • 安全 HTTP URL 連線類別
  • 公開金鑰憑證 API

[AIX Solaris HP-UX Linux Windows][IBM i]您可以在 Java SDK 文件中找到相關資訊。

使用 Java Secure Socket Extension 的範例

Java Secure Socket Extension (JSSE) 也提供範例來示範其功能。 Java Secure Socket Extension (JSSE) 也提供範例來示範其功能。 您可以存取下列位置中的範例:
1.6 版
  1. 存取 https://www.ibm.com/developerworks/java/jdk/security/ 網站。
  2. 按一下 Java 1.6。
  3. Click jssedocs_samples.zip in the Java Secure Socket Extension (JSSE) Guide section.
表 2. 已解壓縮檔案 此表格列出下列解壓縮的檔案:
檔案 說明
ClientJsse.java 使用 JSSE 示範簡單的用戶端與伺服器互動。 會使用所有已啟用的密碼組合。
OldServerJsse.java 前一層次範例
ServerPKCS12Jsse.java 示範使用 JSSE 搭配 PKCS12 金鑰儲存庫檔的簡式用戶端和伺服器互動。 會使用所有已啟用的密碼組合。
ClientPKCS12Jsse.java 示範使用 JSSE 搭配 PKCS12 金鑰儲存庫檔的簡式用戶端和伺服器互動。 會使用所有已啟用的密碼組合。
UseHttps.java 示範使用 com.ibm.net.ssl.www.protocol 類別的 Java 通訊協定處理程式來存取 SSL 或非 SSL Web 伺服器。 URL 是以 httphttps 字首來指定。 會顯示從此網站傳回的 HTML。
請參閱原始碼中的其他指示。 在執行範例之前,請遵循下列指示。

Java 2 安全的許可權

您可能需要下列許可權,才能使用 JSSE 執行應用程式: 此清單僅供參考。
  • java.util.PropertyPermission "java.protocol.handler.pkgs" , "write"
  • java.lang.RuntimePermission "writeFile描述子"
  • java.lang.RuntimePermission "readFile描述子"
  • java.lang.RuntimePermission "accessClassInPackage.sun.security.x509"
  • java.io.FilePermission "${user.install.root}${/}等 ${/}.keystore" , "read"
  • java.io.FilePermission "${user.install.root}${/}等 ${/}.truststore" , "read"
IBMJSSE 提供者:
  • java.security.SecurityPermission "putProviderProperty.IBMJSSE"
  • java.security.SecurityPermission "insertProvider。IBMJSSE "
對於 SUNJSSE 提供者:
  • java.security.SecurityPermission "putProviderProperty.SunJSSE"
  • java.security.SecurityPermission "insertProvider.SunJSSE"

正在除錯

透過 javax.net.debug 系統內容來配置, JSSE 提供下列動態除錯追蹤: -Djavax.net.debug= true

[AIX Solaris HP-UX Linux Windows][IBM i]如果已安裝 JSSE 除錯版本, true 值會開啟追蹤機能。

[z/OS] true 值會開啟追蹤機能。 請利用管理主控台來設定系統內容,以便對應用程式伺服器進行除錯。

JSSE 的文件

如需 JSSE 的文件參照,請參閱 Security: Resources for learning 主題。

JCE

「Java 加密法延伸 (JCE)」提供 WebSphere Application Server的加密、金鑰和雜湊演算法。 JCE 提供加密、金鑰產生、金鑰合約及「訊息鑑別碼 (MAC)」演算法的架構及實作。 加密支援包括對稱、非對稱、區塊及串流密碼。

IBMJCE

IBM 版 Java Cryptography Extension (IBMJCE) 是 WebSphere Application Server中所使用 JCE 加密服務提供者的實作。 IBMJCE 與 SunJCE類似,但 IBMJCE 提供更多演算法:
  • 密碼演算法 (AES、DES、 TripleDES、PBEs、Blowfish 等)
  • 簽章演算法 (SHA1withRSA、 MD5withRSA、 SHA1withDSA)
  • 訊息摘要演算法 (MD5、 MD2、 SHA1、 SHA-256、 SHA-384、 SHA-512)
  • 訊息鑑別碼 (HmacSHA1、 HmacMD5)
  • 金鑰協定演算法 (DiffieHellman)
  • 亂數產生演算法 (IBMSecureRandom, SHA1PRNG)
  • 金鑰儲存庫 (JKS、JCEKS、 PKCS12、JCERACFKS [僅限z/OS ])
IBMJCE 屬於 com.ibm.crypto.provider.* 套件。

如需進一步資訊,請參閱下列網站上的 JCE 相關資訊: https://www.ibm.com/developerworks/java/jdk/security/60/。

IBMJCEFIPS

IBM 版 Java Cryptography Extension Federal Information Processing Standard (IBMJCEFIPS) 是 WebSphere Application Server中所使用 JCE 加密服務提供者的實作。 IBMJCEFIPS 服務提供者實作下列:
  • 簽章演算法 (SHA1withDSA、 SHA1withRSA)
  • 密碼演算法 (AES、 TripleDES、RSA)
  • 金鑰協定演算法 (DiffieHellman)
  • 金鑰 (配對) 產生器 (DSA、AES、 TripleDES、 HmacSHA1、RSA、 DiffieHellman)
  • 訊息鑑別碼 (MAC) (HmacSHA1)
  • 訊息摘要 (MD5、 SHA-1、 SHA-256、 SHA-384、 SHA-512)
  • 演算法參數產生器 (DiffieHellman, DSA)
  • 演算法參數 (AES、 DiffieHellman、DES、 TripleDES、DSA)
  • 金鑰 Factory (DiffieHellman、DSA、RSA)
  • 秘密金鑰 Factory (AES , TripleDES)
  • 憑證 (X.509)
  • 安全隨機 (IBMSecureRandom)

JCE 的應用程式設計介面

Java Cryptography Extension (JCE) 具有提供者型架構。 您可以實作 JCE 所定義的 API ,將提供者插入 JCE 架構中。 JCE API 涵蓋:
  • 對稱大量加密,例如 DES、 RC2及 IDEA
  • 對稱串流加密,例如 RC4
  • 非對稱加密,例如 RSA
  • 密碼型加密 (PBE)
  • 主要合約
  • 訊息鑑別碼

[AIX Solaris HP-UX Linux Windows][IBM i] https://www.ibm.com/developerworks/java/jdk/security/ 網站上記載了 JCE API 的相關資訊。

使用 Java Cryptography Extension 的範例

https://www.ibm.com/developerworks/java/jdk/security/ 網站上的 jceDocs_samples.zip 檔案中有一些範例。 解壓縮檔案,並在 jceDocs/samples 目錄中找到下列範例:
表 3. 使用 Java Cryptography Extension 的範例。 此表格說明使用 Java 加密法延伸的範例。
檔案 說明
SampleDSASignature.java 示範如何產生 DSA 金鑰 (公開金鑰和私密金鑰) 配對,並使用該金鑰來使用 SHA1withDSA 演算法以數位方式簽署訊息
SampleMarsCrypto.java 示範如何產生 Mars 秘密金鑰,以及如何執行 Mars 加密和解密
SampleMessageDigests.java 示範如何使用 MD2 和 MD5 演算法的訊息摘要
SampleRSACrypto.java 示範如何產生 RSA 金鑰組,以及如何執行 RSA 加密和解密
SampleRSASignatures.java 示範如何產生 RSA 金鑰配對 (公開金鑰和私密金鑰) ,並使用金鑰以數位方式使用 SHA1withRSA 演算法來簽署訊息
SampleX509Verification.java 示範如何驗證 X509 憑證