WebLogic提供一套功能全面的安全服務
這些服務可以從各個方面保護域及其部署
這些安全服務影響到域的所有方面
從Java Security Manager提供的最底層安全性
到連接級別的安全性
再到應用級別的安全性(可以保護所管理和部署的對象
比如EJB
web服務和JDBC池)
最後到域級別的安全性(可以建立兩個域之間的信任)
這些安全服務的目標是
個截然不同的用戶群
可以使用服務來保護其應用程序的應用程序開發人員
需要為系統和部署配置安全性的管理員
以及可以修改和擴展WebLogic所提供的功能的安全性供應商
讓我們從JVM層開始
在這一層
Java Security Manager使用一個安全性策略文件來限制對特定的運行時操作的訪問
這確保了運行在JVM(包括WebLogic Server本身)上的程序僅可以許可方式訪問受保護的資源
例如
可以配置Java Security Manager
以便讓所有線程都擁有僅對於文件系統中特定目錄的寫權限
通過允許為資源適配器和EJB定義另外的安全策略
WebLogic增強了Security Manager
從而確保了這些組件能夠只訪問已定義的資源
還有一些其他的全局高級安全性權限可以應用於這些資源和應用程序代碼
WebLogic可以從客戶端過濾連接請求
連接過濾器定義了一些規則
規定了如何確定服務器是接受還是拒絕客戶端連接
這些規則基於幾個參數
這些參數通常包括
客戶端的IP地址和端口
用於建立連接的協議
以及服務器的監聽地址和端口
可以為一台服務器指定多個連接過濾器
甚至可以編寫自己的連接過濾器類來實現定制的過濾邏輯
例如
通過使用連接過濾器
可以很容易地確保服務器只接受來自內部網的T
連接
SSL安全性是另一種可在套接字層上使用的機制
我們在
章中已經講述過這種機制
SSL可以通過支持數據完整性
機密性和身份驗證
保護給定的網絡通信
WebLogic部分地支持標准的JAAS
JAAS框架是對J
SE v
的一種標准擴展
現在已成為J
SE v
平台的一部分
身份驗證使服務器可以驗證運行Java代碼的用戶的身份
不論它是applet
servlet
EJB還是應用程序
授權則使服務器能夠基於用戶的身份
安全權限和策略實施訪問控制
WebLogic允許Java客戶端使用JAAS身份驗證
而且邏輯模塊也是使用JAAS實現的
如果需要使用JAAS授權
就必須在WebLogic的基礎架構上編寫自己的模式
WebLogic的安全性基礎架構建立在一組模塊化的
可擴展的安全服務提供程序接口(security service provider interfaces
SSPI)之上
這種架構允許插入新的安全提供程序替換舊的
並可以與用戶自己的提供程序一起運行WebLogic的默認提供程序
WebLogic發行文件配備了一組安全提供程序
為SSPI提供默認實現
WebLogic的安全提供程序為J
EE應用程序實現了底層安全性框架
也就是說
標准的J
EE定義的安全機制是通過SSPI實現(和擴展)的
通常
WebLogic的安全提供程序會改進現有的安全約束
例如
標准的ejb
jar
xml部署描述符允許限定只有具有特定角色的
已通過身份驗證的用戶才能訪問某個EJB方法
WebLogic允許改進這種約束
確保用戶只在一天中的某些時段具有訪問權
事實上
SSPI是一種開放的架構
可以很容易地插入來自某家安全供應商的第三方安全提供程序
另外
還可以通過實現自己的安全提供程序來構建新的安全服務
WebLogic默認的安全提供程序功能相當全
security realm(安全域)就是一個用戶
組
角色
安全策略的邏輯分組
以及一整套安全提供程序
為服務器資源指定的安全策略可用於確定授權誰訪問資源
WebLogic使用戶可以保護所有的資源
單個EJB方法
web應用程序
web頁面的集合
連接池
數據源或者任何受管理的對象
甚至可以保護JNDI樹中的分支
從而防止未得到授權的客戶端在JNDI樹中查找對象
所有這些安全數據都保存在一台嵌入式LDAP服務器中
還可以配置WebLogic來使用外部的LDAP庫
比如Open LDAP
Active Directory
或Novell NDS
這些外部庫只能用於身份驗證
而不能用於授權
最後
WebLogic允許在兩個域之間建立一種信任機制
這確保了一個域中已通過身份驗證的用戶可以訪問另一個域中的資源
本章分析了所有這些安全機制
盡管它們彼此大相迥異
但是它們互相補充得非常好
我們從考察Java Security Manager和WebLogic如何過濾連接請求開始
然後分析WebLogic的身份驗證和授權框架
並了解它如何支持標准的J
EE安全服務
我們還切換使用了安全域中可用的各種安全提供程序以及它們的默認實現
最後
我們將考察如何使用JAAS進行身份驗證
並舉一個Authentication 和Identity Assertion提供程序的例子
Java Security Manager 在JVM層上
WebLogic可以使用標准的Java Security Manager來防止不受信任的代碼執行有害的動作
可以使用安全策略文件來配置JVM
以便讓運行在JVM上的所有線程都能夠受限制地訪問敏感的運行時操作
安全策略文件封裝了一組權限
這些權限將授予給當前的JVM實例中加載的所有類(或者取消)
可以定義一整套安全權限來控制對特定資源的訪問——例如
對於文件系統上某個文件夾的
寫(write)
訪問權限
對於特定主機和特定范圍的端口的
連接(connect)
訪問權限
對於環境變量的
讀(read)
訪問權限
對於當前類加載器的
獲取(get)
訪問權限
等等
要獲得更多關於Security Manager和安全策略文件的信息
請參考JDK說明文檔
Java的Security Manager確保運行在WebLogic中的任意代碼都僅可以許可的方式訪問這些重要資源
這種低級的訪問控制對於第三方不受信任代碼可能很有用
Java Security Manager還可以與J
EE部署設置交互
例如
可以使用標准的ra
xml部署描述符來定義應用於資源適配器的安全權限
WebLogic也為web應用程序和EJB提供類似的訪問控制
注意
WebLogic需要有一個可用的策略文件才可以運行
startWebLogic腳本用於加載默認位於WL_HOME/server/lib/weblogic
Policy下的策略文件
配置Security Manager 為了使用Java Security Manager
需要在啟動WebLogic Server時從命令行提供兩個選項
必須使用–Djava
security
manager選項
以確保安裝了默認的安全管理器而且JVM通過了策略檢查
必須使用–Djava
security
policy選項
以指定安全策略文件的位置
默認情況下
JVM使用定義在java
security和java
policy文件(位於JAVA_HOME/jre/lib/security文件夾中)中的安全策略
下面是使用定制的安全策略文件啟動WebLogic Server的語法
java –Djava
security
manager –Djava
security
policy==c:oreilly
policy
weblogic
Server
WebLogic創建的默認啟動腳本引用了位於WL_HOME/server/lib/weblogic
policy下的示例安全策略文件
注意
指定java
security
policy參數時
我們使用了==(雙等號)
這使得Security Manager使用c:oreilly
policy作為它惟一的策略源
如果我們只使用一個等號
該策略文件就會與JDK安裝所提供的默認安全策略文件一起使用
通常
JVM將使用安全策略文件對運行在WebLogic中的任意代碼實施訪問控制
這條規則惟一的例外是在WebLogic Server啟動時
當服務器啟動時
WebLogic部分地禁用了Java Security Manager
並使用一個禁用checkRead()方法的變體來替換它
雖然這種方法改進了啟動順序的性能
但是它也會降低JVM在啟動期間的安全性
另外
它意味著WebLogic的啟動類將使用這個修改過的安全管理器運行
需要確保這些類不會導致破壞安全性
注
因為策略文件決定了運行在WebLogic的JVM中的所有類的訪問權限
所以建議只有管理員才能讀寫安全策略文件
不應該允許其他用戶訪問策略文件
全局安全策略 WebLogic允許為EJB
資源適配器和weblogic
policy文件中的web應用程序定義安全策略
表
列出了為這些組件類型定義默認權限所用的代碼基址
表
應用於J
EE組件的訪問權限的默認代碼基址
可以使用這些代碼基礎對特定的J
EE組件類型授予特殊的權限
注意
在這些代碼基址下定義的任何安全策略都可以應用於所有的EJB
資源適配器和部署到特定的服務器實例的web應用程序
特定於應用程序的安全策略 還可以定義特定於某個EJB組件或資源適配器的安全策略
從而確保只以特定的組件為目標
為此
必須修改它們的部署描述符
而不是策略文件本身
資源適配器支持這種作為J
EE標准一部分的機制
只需修改標准的ra
xml描述符文件
對於EJB
需要修改weblogic
ejb
jar
xml描述符文件
兩種情況中
都是securitypermission元素允許用戶定義另外的安全策略
讓我們看一看如何為EJB指定權限
weblogic
ejb
jar
xml描述符中的security
permission元素指定了應用於打包在EJB JAR中的所有EJB的安全權限
下面的例子授予服務器文件系統中的一個臨時目錄對EJB的讀和寫的訪問權限
<weblogic
enterprise
bean>
<!
webLogic enterprise bean statements go here
>
</weblogic
enterprise
bean>
<security
role
assignment>
<!
the optional security role assignments go here
>
</security
role
assignment>
<security
permission>
<description>
grant permission to special folder
</description>
<security
permission
spec>
grant {
permission java
io
FilePermission
f:
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27282.html