本書是Java安全領域公認的標桿之作,被奉為每一位Java開發工程師必讀的著作之一。由資深專家撰寫,第1版4年來暢銷不衰,繁體版在臺灣出版,大陸和臺灣的讀者都給予了極高的評價。第2版根據Java 7全面更新,不僅新增了很多重要的內容,而且對第1版中存在的瑕疵和不足進行了完善,使得本書內容更為詳盡、更加與時俱進,能更好地滿足廣大Java企業級應用開發工程師和系統架構師的需求。
全書共12章,分為3個部分:基礎篇(第1~4章)對Java企業級應用的安全知識、密碼學核心知識、與Java加密相關的API和通過權限文件加強系統安全方面的知識進行了全面的介紹;實踐篇(第5~9章)不僅對電子郵件傳輸算法、消息摘要算法、對稱加密算法、非對稱加密算法、數字簽名算法等現今流行的加密算法的原理進行了全面而深入的剖析,還結合翔實的范例說明了各種算法的具體應用場景;綜合應用篇(第10~12章)既細致地講解了加密技術對數字證書和SSL/TLS協議的應用,又以示例的方式講解了加密與解密技術在網絡中的實際應用,極具實踐指導性。
Java開發者將通過本書掌握密碼學和Java加密/解密技術的所有細節;系統架構師將通過本書領悟構建安全企業級應用的要義;其他領域的安全工作者也能通過本書一窺加密與解密技術的精髓。
經典著作全新升級,第1版4年來暢銷不衰,繁體版在臺灣出版,大陸和臺灣的讀者都給予了極高的評價 Java安全領域公認的標桿之作,資深專家撰寫,全面介紹Java 7中與安全相關的各種API和工具,深入剖析現今流行的各種加密算法及其應用,包含多個前沿的應用案例,實踐性強
梁 棟 資深Java EE技術專家和Java EE企業級應用架構師。安全技術專家,對Java加密與解密技術有系統深入的研究。開源技術愛好者,有著豐富的Spring、Apache系列等開源框架的實踐經驗。國內Bouncy Castle擴展加密技術引入者,對其算法實現與應用有深入研究,并將其整理成冊,供廣大技術人員參考學習。擅長分布式、高并發系統的設計與架構,在分布式緩存、NoSQL、消息隊列等方面有非常豐富的實踐經驗。
前 言
第一部分 基礎篇
第1章 企業應用安全
1.1 我們身邊的安全問題
1.2 拿什么來拯救你,我的應用
1.2.1 安全技術目標
1.2.2 OSI安全體系結構
1.2.3 TCP/IP安全體系結構
1.3 捍衛企業應用安全的銀彈
1.3.1 密碼學在安全領域中的身影
1.3.2 密碼學與Java EE
1.4 為你的企業應用上把鎖
1.5 小結
第2章 企業應用安全的銀彈密碼學
2.1 密碼學的發家史
前 言
第一部分 基礎篇
第1章 企業應用安全
1.1 我們身邊的安全問題
1.2 拿什么來拯救你,我的應用
1.2.1 安全技術目標
1.2.2 OSI安全體系結構
1.2.3 TCP/IP安全體系結構
1.3 捍衛企業應用安全的銀彈
1.3.1 密碼學在安全領域中的身影
1.3.2 密碼學與Java EE
1.4 為你的企業應用上把鎖
1.5 小結
第2章 企業應用安全的銀彈密碼學
2.1 密碼學的發家史
2.1.1 手工加密階段
2.1.2 機械加密階段
2.1.3 計算機加密階段
2.2 密碼學定義、術語及其分類
2.2.1 密碼學常用術語
2.2.2 密碼學分類
2.3 保密通信模型
2.4 古典密碼
2.5 對稱密碼體制
2.5.1 流密碼
2.5.2 分組密碼
2.6 非對稱密碼體制
2.7 散列函數
2.8 數字簽名
2.9 公鑰基礎設施
2.9.1 PKI的標準
2.9.2 PKI系統的組成
2.9.3 數字證書
2.10 PGP、OpenPGP與GPG
2.11 密碼學的未來
2.11.1 密碼算法的破解
2.11.2 密碼學的明天
2.12 小結
第3章 Java加密利器
3.1 Java與密碼學
3.1.1 Java安全領域組成部分
3.1.2 安全提供者體系結構
3.1.3 關于出口的限制
3.1.4 關于本章內容
3.2 java.security包詳解
3.2.1 Provider類
3.2.2 Security類
3.2.3 MessageDigest類
3.2.4 DigestInputStream類
3.2.5 DigestOutputStream類
3.2.6 Key接口
3.2.7 AlgorithmParameters類
3.2.8 AlgorithmParameter-
Generator類
3.2.9 KeyPair類
3.2.10 KeyPairGenerator類
3.2.11 KeyFactory類
3.2.12 SecureRandom類
3.2.13 Signature類
3.2.14 SignedObject類
3.2.15 Timestamp類
3.2.16 CodeSigner類
3.2.17 KeyStore類
3.3 javax.crypto包詳解
3.3.1 Mac類
3.3.2 KeyGenerator類
3.3.3 KeyAgreement類
3.3.4 SecretKeyFactory類
3.3.5 Cipher類
3.3.6 CipherInputStream類
3.3.7 CipherOutputStream類
3.3.8 SealedObject類
3.4 java.security.spec包和javax.crypto.spec包詳解
3.4.1 KeySpec和Algorithm-ParameterSpec接口
3.4.2 EncodedKeySpec類
3.4.3 SecretKeySpec類
3.4.4 DESKeySpec類
3.5 java.security.cert包詳解
3.5.1 Certificate類
3.5.2 CertificateFactory類
3.5.3 X509Certificate類
3.5.4 CRL類
3.5.5 X509CRLEntry類
3.5.6 X509CRL類
3.5.7 CertPath類
3.6 javax.net.ssl包詳解
3.6.1 KeyManagerFactory類
3.6.2 TrustManagerFactory類
3.6.3 SSLContext類
3.6.4 HttpsURLConnection類
3.6.5 SSLSession接口
3.6.6 SSLSocketFactory類
3.6.7 SSLSocket類
3.6.8 SSLServerSocketFactory類
3.6.9 SSLServerSocket類
3.7 小結
第4章 他山之石,可以攻玉
4.1 加固你的系統
4.1.1 獲得權限文件
4.1.2 配置權限文件
4.1.3 驗證配置
4.2 加密組件Bouncy Castle
4.2.1 獲得加密組件
4.2.2 擴充算法支持
4.2.3 相關API
4.3 輔助工具Commons Codec
4.3.1 獲得輔助工具
4.3.2 相關API
4.4 小結
第二部分 實踐篇
第5章 電子郵件傳輸算法Base64
5.1 Base64算法的由來
5.2 Base64算法的定義
5.3 Base64算法與加密算法的關系
5.4 實現原理
5.4.1 ASCII碼字符編碼
5.4.2 非ASCII碼字符編碼
5.5 模型分析
5.6 Base64算法實現
5.6.1 Bouncy Castle
5.6.2 Commons Codec
5.6.3 兩種實現方式的差異
5.6.4 不得不說的問題
5.7 Url Base64算法實現
5.7.1 Bouncy Castle
5.7.2 Commons Codec
5.7.3 兩種實現方式的差異
5.8 應用舉例
5.8.1 電子郵件傳輸
5.8.2 網絡數據傳輸
5.8.3 密鑰存儲
5.8.4 數字證書存儲
5.8.5 OpenSSL操作Base 64編碼
5.9 小結
第6章 驗證數據完整性消息摘要算法
6.1 消息摘要算法簡述
6.1.1 消息摘要算法的由來
6.1.2 消息摘要算法的家譜
6.2 MD算法家族
6.2.1 簡述
6.2.2 模型分析
6.2.3 實現
6.3 SHA算法家族
6.3.1 簡述
6.3.2 模型分析
6.3.3 實現
6.4 MAC算法家族
6.4.1 簡述
6.4.2 模型分析
6.4.3 實現
6.5 其他消息摘要算法
6.5.1 簡述
6.5.2 實現
6.6 循環冗余校驗算法CRC算法
6.6.1 簡述
6.6.2 模型分析
6.6.3 實現
6.7 實例:文件校驗
6.8 小結
第7章 初等數據加密對稱加密算法
7.1 對稱加密算法簡述
7.1.1 對稱加密算法的由來
7.1.2 對稱加密算法的家譜
7.2 數據加密標準DES
7.2.1 簡述
7.2.2 模型分析
7.2.3 實現
7.3 三重DESDESede
7.3.1 簡述
7.3.2 實現
7.4 高級數據加密標準AES
7.4.1 簡述
7.4.2 實現
7.5 國際數據加密標準IDEA
7.5.1 簡述
7.5.2 實現
7.6 基于口令加密PBE
7.6.1 簡述
7.6.2 模型分析
7.6.3 實現
7.7 實例:對稱加密網絡應用
7.8 小結
第8章 高等數據加密非對稱加密算法
8.1 非對稱加密算法簡述
8.1.1 非對稱加密算法的由來
8.1.2 非對稱加密算法的家譜
8.2 密鑰交換算法DH&ECDH
8.2.1 簡述
8.2.2 模型分析
8.2.3 DH實現
8.2.4 ECDH實現
8.3 典型非對稱加密算法RSA
8.3.1 簡述
8.3.2 模型分析
8.3.3 實現
8.4 常用非對稱加密算法ElGamal
8.4.1 簡述
8.4.2 模型分析
8.4.3 實現
8.5 實例:非對稱加密網絡應用
8.6 小結
第9章 帶密鑰的消息摘要算法數字簽名算法
9.1 數字簽名算法簡述
9.1.1 數字簽名算法的由來
9.1.2 數字簽名算法的家譜
9.2 模型分析
9.3 經典數字簽名算法RSA
9.3.1 簡述
9.3.2 實現
9.4 數字簽名標準算法DSA
9.4.1 簡述
9.4.2 實現
9.5 橢圓曲線數字簽名算法ECDSA
9.5.1 簡述
9.5.2 實現
9.6 實例:帶有數字簽名的加密網絡應用
9.7 小結
第三部分 綜合應用篇
第10章 終極武器數字證書
10.1 數字證書詳解
10.2 模型分析
10.2.1 證書簽發
10.2.2 加密交互
10.3 證書管理
10.3.1 KeyTool證書管理
10.3.2 OpenSSL證書管理
10.4 證書文件操作
10.4.1 JKS文件操作
10.4.2 PFX文件操作
10.4.3 PEM文件操作
10.5 應用舉例
10.6 小結
第11章 終極裝備安全協議
11.1 安全協議簡述
11.1.1 HTTPS協議
11.1.2 SSL/TLS協議
11.2 模型分析
11.2.1 協商算法
11.2.2 驗證證書
11.2.3 產生密鑰
11.2.4 加密交互
11.3 單向認證服務
11.3.1 準備工作
11.3.2 服務驗證
11.3.3 代碼驗證
11.4 雙向認證服務
11.4.1 準備工作
11.4.2 服務驗證
11.4.3 代碼驗證
11.5 應用舉例
11.6 實例
11.6.1 SSLSocket獲取數字證書
11.6.2 SSLSocket加密交互
11.7 小結
第12章 量體裁衣為應用選擇合適的裝備
12.1 實例:常規Web應用開發安全
12.1.1 常規Web應用基本實現
12.1.2 安全升級1摘要處理
12.1.3 安全升級2加鹽處理
12.2 實例:IM應用開發安全
12.2.1 IM應用開發基本實現
12.2.2 安全升級1隱藏數據
12.2.3 安全升級2加密數據
12.3 實例:Web Service應用開發安全
12.3.1 Web Service應用基本實現
12.3.2 安全升級1單向認證服務
12.3.3 安全升級2雙向認證服務
12.4 小結
附錄A Java 7支持的算法
附錄B Bouncy Castle支持的算法
基 礎 篇
第1章 企業應用安全
第2章 企業應用安全的銀彈密碼學
第3章 Java加密利器
第4章 他山之石,可以攻玉
第 1 章企業應用安全
當計算機將我們包圍、當網絡無處不在時,安全問題成為了我們日益關心的問題。我們依賴于網絡,同時又受限于網絡,而網絡本身卻是不安全的!如今越來越多的企業應用都架設在網絡平臺之上,雖然這樣能為用戶提供更快捷和便利的服務支持,但這些服務支持也越來越龐大。與此同時,為了滿足用戶日益增長的服務需求,企業應用不斷在如何提供更好的服務支持和更大信息量的傳輸方面加大技術投入。而與此失衡的是,企業應用的安全性卻未能受到足夠的重視。單憑用戶名和口令鑒別用戶身份,繼而授權用戶使用的方式難以確保數據的安全性。
1.1 我們身邊的安全問題
安全,似乎是個問題。但是,我們覺得這個話題似乎不是那么關鍵!通常情況下,我們通過為用戶提供用戶名和口令驗證的方式就可以避免這個問題,但這不是最佳答案,因為這樣做是遠遠不夠的。安全隱患無處不在,還是先來看看我們所處環境的安全狀況吧!
q 存儲問題:閃存芯片的快速的、革命性的發展使得移動存儲行業發生了質的變化,各種數據存儲在各種不同的移動存儲設備上。當塞滿了公司的年度報表、下一年企劃策略等各種商業機密的優盤突然不翼而飛時,我們才會猛然驚醒優盤中的數據沒有任何安全措施,甚至連口令都沒有!
q 通信問題:我們習慣于通過IM工具與好友聊天、交換心情、透漏隱私,甚至通過IM工具與合作公司交換公司私密數據!當你的隱私成為公共話題時,或當你的公司的商業數據被曝光時,你突然發現原來IM工具是不安全的!沒錯,不管是哪一種IM工具,都在不遺余力地告誡用戶聊天信息可能被盜取,“安全提示:不要將銀行卡號暴露在您的聊天信息中!”相信大家都不會對這條提示信息感到陌生。
q B2C、B2B交易問題:到郵局排隊匯款的日子已經一去不復返了,取而代之的是網上銀行,輕松地點擊一下按鈕就能順利完成轉賬的操作。網上銀行的確為我們的生活帶來了便利,但是,如果我們有被釣魚網站騙取銀行卡號和密碼的不幸遭遇,那么現在想起來是不是仍然心有余悸?難道沒有一種辦法能確保我們輸入的信息被發送到安全的地方嗎?
q 服務交互問題:隨著大型應用對交互性的需求越來越高,這些應用之間的數據交互也越來越頻繁,甚至是大批量、高負荷的數據交互。當你公司的應用通過Web Service接口與合作伙伴交互數據的時候,你該如何確定對方就是你所信賴的合作伙伴呢?你的Web Service接口安全嗎?
q 移動應用服務問題:3G時代已經來臨,在不遠的某一天,你將完全可以通過手機完成現在只能通過PC完成的事情,如視頻聊天、B2C購物、銀行轉賬等等。3G時代預示著智能手機將無所不能!其實手機也是計算機,只不過它與你熟悉的PC在體積上有較大的差別而已。3G手機一樣要通過網絡完成你要執行的操作,將平臺由PC轉換為手機,并不能保證手機平臺就能比PC平臺有著更高的安全性!用手機在WAP網站上下載一款軟件,是再平常不過的事情了。但是,如何避免用戶因不夠信任該軟件而取消下載呢?下載后,手機如何鑒別這個軟件是安全的呢?如何避免發布的軟件在被客戶成功下載之前被篡改呢?
q 內部人為問題:前面列舉的問題都來源于外部,我們往往忽略了內部人為問題。現在的企業應用都能為用戶提供用戶名和口令來確保用戶的數據安全,但很多時候用戶名和口令在數據庫中卻一目了然,甚至有的是以明文方式存儲的!企業內部任何能訪問數據庫的員工都能輕而易舉地盜取用戶的用戶名和口令,然后冒充用戶的身份完成各種合乎用戶行為的操作,侵害用戶的利益。企業因此被用戶投訴之后,卻又找不到任何蛛絲馬跡。
當我們的利益受到侵犯時我們才會想起安全問題,安全原來如此重要!一不小心,你的企業應用就會因為數據泄露而喪失良機、引發投訴,甚至是付出巨額賠款!安全問題關系著企業的生死存亡!