200 likes | 445 Views
Java 網路程式設計. 第 17 章 讓 Java 網路應用更安全. Java 對於安全的支援. 從網路上面下載的程式碼有安全上的顧慮, Java 對於安全問題有一整套的模型與支援 會寫 Java 網路程式以後還要會運用 Java 對於安全的支援,讓 Java 應用更安全 除了基本的安全機制以外, Java 也運用密碼學 (cryptography) 的技術. Java 密碼學 (cryptography) 的技術. JCA(Java Cryptography) JCA 的 3 個延伸功能
E N D
Java網路程式設計 第17章 讓Java網路應用更安全
Java對於安全的支援 • 從網路上面下載的程式碼有安全上的顧慮, • Java對於安全問題有一整套的模型與支援 • 會寫Java網路程式以後還要會運用Java對於安全的支援,讓Java應用更安全 • 除了基本的安全機制以外,Java也運用密碼學(cryptography)的技術
Java密碼學(cryptography)的技術 • JCA(Java Cryptography) • JCA的3個延伸功能 • JAAS(Java Authentication and Authorization Services) • JCE(Java Cryptography Extension) • JSSE(Java Secure Sockets Extension)
Java的安全模型(security model) • Applet是隱含在Web網頁中的,由於是外來程式,所以通常我們不會信任applet,applet對於電腦的權限受到嚴格的限制。 • Java採用Sandbox model,在這個安全模型中,applet被隔離在系統之外,系統會把applet當成不信任的程式碼(untrusted code)
signed applet的觀念 • signed applet以JAR archive的型式存在,含有利用密碼技術建立的安全簽章(secure signature) • 簽章本身載明程式碼的所有者,技術上可以讓他人無法偽造簽章或是更改JAR archive內的程式碼 • 如此一來,JVM就可以給予這樣的applet完整的權限
Java提供的工具 • keytool • Jarsigner • 安全設定的例子 : • keystore "file:javaSecurityTest.keystore"; • grant signedBy "mykey" { • permission java.security.AllPermission; • };
安全的要求(security requirement) • 私密性(confidentiality) • 完整性(integrity) • 辨識(authentication)
加密法的基本原理 • 發送端要傳送的訊息以「明文」(plaintext)稱之,用金鑰(key)加密之後成為無法用一般方式讀取的「密文」(ciphertext),然後傳送到接收端,利用金鑰解密後,還原成可讀取的明文 • 由於密文無法讀取,我們可以說這種方式幫助維持資料的私密性
非對稱式的加密法 • 在第一種情況中,甲方用自己的私鑰加密,乙方用公鑰解密,由於只有甲方知道自己的私鑰,所以可確認發送端的身份,問題是公鑰公諸於世,無法確保資料的私密性與完整性 • 在第二種情況中,甲方用乙方公佈的金鑰來加密,如此一來,只有乙方有私鑰來解密,這樣可確保資料的私密性,但無法確知發送端是否為甲方
數位簽章(Digital signature) • 更有效地解決電子交易的安全問題 • 要傳送的明文用雜湊函數(hash function)計算出簡短的訊息摘要(Message digest),用私鑰加密後產生數位簽章 • 數位簽章和明文用另一組公鑰加密以後傳送到接收端。接收端收到訊息以後用私鑰解密,得到明文與數位簽章,明文可用雜湊函數算出訊息摘要,這個訊息摘要和數位簽章解密後得到的結果應該一樣
數位證書(Digital certificate), • 交易權威性的問題有待解決,因為有人可以冒充別人公佈公鑰 • 所以,公鑰的使用必須先取得數位證書(Digital certificate),由發送端向權威機構申請,完成之後,接收端才能從權威機構那兒取得公鑰
Java對於密碼機制的支援 • JAAS(Java Authentication and Authorization Service) • JCE(Java Cryptography Extension) • JSSE(Java Secure Socket Extension)
安全的通訊槽(Secure Sockets) • 對於參與網路電子商務的顧客來說,安全是最重要的考量之一 • 我們可以透過通訊槽的加密來提昇網際網路連線的安全性 • 之前介紹的通訊槽是透過java.net.Socket來建立的,安全的通訊槽(secure socket)則是透過javax.net.ssl.SSLSocketFactory的createSocket方法來建立