User: stark
Date: 01/02/12 00:59:20
Added: security/docs ContribSecurityBase.gif
ContribSecurityJAAS.gif JAAS_Setup_Steps.html
SRP_LICENSE StatelessSIDiagram.gif readme.html
security-policy.dtd security-policy.jpg
Log:
Documentation for the security extension tree
Revision Changes Path
1.1 contrib/security/docs/ContribSecurityBase.gif
<<Binary file>>
1.1 contrib/security/docs/ContribSecurityJAAS.gif
<<Binary file>>
1.1 contrib/security/docs/JAAS_Setup_Steps.html
Index: JAAS_Setup_Steps.html
===================================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>JAAS Setup Steps</title>
</head>
<body>
This document goes through the steps necessary to create a JBoss distribution
that allows for testing the enhanced JAAS based security model contained
in the contrib security release.
<ol>
<li>Start with a fresh cvs snapshot of JBoss. Either do a cvs checkout or
download a snapshot archvie from <a href="http://www.jboss.org/zip_archives/">
JBoss Source Archive</a>. The date of the snapshot must be Feb 11 2001 or
latter.
The steps for a cvs checkout are:
<pre>
784>cvs -d :pserver:[EMAIL PROTECTED]:/products/cvs/ejboss login
(Logging in to [EMAIL PROTECTED])
CVS password: anon
785>cvs -d :pserver:[EMAIL PROTECTED]:/products/cvs/ejboss co jboss
cvs server: Updating jboss
...
</pre>
This will create a jboss directory at the location you run the cvs command
from.
The full path to this jboss directory will be referred to as jboss_home.
<li>Get the contrib security cvs snapshot. The steps for a cvs checkout are:
<pre>
794>cvs -d :pserver:[EMAIL PROTECTED]:/products/cvs/ejboss login
(Logging in to [EMAIL PROTECTED])
CVS password: anon
795>cvs -d :pserver:[EMAIL PROTECTED]:/products/cvs/ejboss co
contrib/security
cvs server: Updating contrib/security
...
</pre>
This will create a contrib/security directory at the location you run the
cvs command from. The full path to this security subdirectory will be referred
to as contrib_security.
<li>Build the JBoss distribution.
<ol>
<li>cd to jboss_home/src/build
<li>Run build.bat or build.sh as approriate for your operating system.
<li>This will create a jboss_home/dist directory with the following
sudirs:
<pre>
bin/ client/ conf/ db/ deploy/ lib/ log/ tmp/
</pre>
</ol>
<li>Build the contrib security patch.
<ol>
<li>cd to contrib_security/src/build
<li>Run build.bat or build.sh as approriate for your operating system
passing
in the jboss_home location. E.g.,
<code>build.bat D:/tmp/cvs/jboss</code>
<li>This creates the following files in the JBoss dist tree:
<pre>
jboss_home/dist/bin/run_patch.bat
jboss_home/dist/bin/run_patch.sh
jboss_home/dist/bin/SRPVerifierStore.ser
jboss_home/dist/conf/default/jboss.conf
jboss_home/dist/conf/default/jboss.jcml
jboss_home/dist/conf/default/server.policy
jboss_home/dist/conf/default/sample_policy.xml
jboss_home/dist/lib/patch/jboss-patch.jar
jboss_home/dist/lib/patch/jboss-jaas-patch.jar
jboss_home/dist/lib/patch/srp.jar
jboss_home/dist/lib/restricted/proxy.jar
jboss_home/dist/deploy/secure-ejbs.jar
</pre>
</ol>
<li>Start the JBoss server.
<ol>
<li>cd to jboss_home/dist/bin and use either the run_patch.bat or
run_patch.sh
as appropriate for your operating system.
<li>Some of the key items to check in the server.log or console window
<pre>
1454>run_patch.bat
Using configuration "default"
[Info] Java version: 1.3.0_01,Sun Microsystems Inc.
[Info] Java VM: Java HotSpot(TM) Client VM 1.3.0_01,Sun Microsystems Inc.
[Info] System: Windows 2000 5.0,x86
[Shutdown] Shutdown hook added
[Service Control] Registered with server
...
[SRPVerifierStoreService] Starting
[SRPVerifierStoreService] Created SerialObjectStore at:
D:\tmp\cvs\jboss\dist\bin\SRPVerifierStore.ser
[SRPVerifierStoreService] Started
[SRPService] Starting
[SRPService] setVerifierStore, security.srp.protocol.SerialObjectStore@72e449
[SRPService] Bound SRPServerProxy at SRPServerInterface
[SRPService] Bound AuthenticationCache at SRPAuthenticationCache
[SRPService] Started
[JAAS Security Manager] Starting
[JAAS Security Manager] JAAS.startService,
cachePolicy=org.jboss.util.TimedCachePolicy@549f94
[JAAS Security Manager] Started
[Default] Loading policy file from:
file:/D:/tmp/cvs/jboss/dist/conf/default/sample_policy.xml
[Default] Added module-option name=digest-algorithm, value=SHA
[Default] grant, cs=(null <no certificates>); principals=scott;
permissions=[(org.jboss.test.security.test.NamespacePermission Project1 rwxd),
(org.jboss.test.security.test.NamespacePermission Project1/Documents/Private rw-d)]
[Default] grant, cs=(null <no certificates>); principals=starksm;
permissions=[(org.jboss.test.security.test.NamespacePermission
Project1/Documents/Public r---)]
...
[J2EE Deployer Default] Deploy J2EE application:
file:/D:/tmp/cvs/jboss/dist/deploy/secure-ejbs.jar
[J2EE Deployer Default] Create application secure-ejbs.jar
[J2EE Deployer Default] install module secure-ejbs.jar
[J2EE Deployer Default] Starting module secure-ejbs.jar
[Container factory[patch]]
Deploying:file:/D:/tmp/cvs/jboss/dist/tmp/deploy/Default/secure-ejbs.jar/ejb1001.jar
[Verifier] Verifying
file:/D:/tmp/cvs/jboss/dist/tmp/deploy/Default/secure-ejbs.jar/ejb1001.jar
[Container factory[patch]] Deploying Entity
[Container factory[patch]] lookup securityManager name: java:/jaas/test-domain
[Container factory[patch]] JaasSecurityManagerService()
[Container factory[patch]] JAAS.getObjectInstance, null
[Container factory[patch]] -> org.jnp.interfaces.NamingContext@242b11
[Container factory[patch]] JAAS.rebind test-domain, Reference Class Name:
org.jboss.security.plugins.SubjectSecurityManager
[Container factory[patch]] JAAS.Created
securityMgr=org.jboss.security.plugins.SubjectSecurityManager@37d090
[Container factory[patch]] JAAS.setCachePolicy,
c=org.jboss.util.TimedCachePolicy@549f94
[Container factory[patch]] SubjectSecurityManager(test-domain).setCachePolicy,
c=org.jboss.util.TimedCachePolicy@549f94
[Container factory[patch]] JAAS.Added test-domain,
org.jboss.security.plugins.SubjectSecurityManager@37d090 to map
[Container factory[patch]] JaasSecurityManagerService()
[Container factory[patch]] JAAS.getObjectInstance, test-domain
[Container factory[patch]] ->
org.jboss.security.plugins.SubjectSecurityManager@37d090
[Container factory[patch]] JaasSecurityManagerService()
[Container factory[patch]] JAAS.getObjectInstance, null
[Container factory[patch]] -> org.jnp.interfaces.NamingContext@5db314
[Container factory[patch]] JaasSecurityManagerService()
[Container factory[patch]] JAAS.getObjectInstance, test-domain
[Container factory[patch]] ->
org.jboss.security.plugins.SubjectSecurityManager@37d090
[Container factory[patch]] Created SecurityInterceptor[patch]
[Container factory[patch]] Deploying ProjRepository
[Container factory[patch]] lookup securityManager name: java:/jaas/test-domain
[Container factory[patch]] JaasSecurityManagerService()
[Container factory[patch]] JAAS.getObjectInstance, null
[Container factory[patch]] -> org.jnp.interfaces.NamingContext@712b3a
[Container factory[patch]] JaasSecurityManagerService()
[Container factory[patch]] JAAS.getObjectInstance, test-domain
[Container factory[patch]] ->
org.jboss.security.plugins.SubjectSecurityManager@37d090
[Container factory[patch]] JaasSecurityManagerService()
[Container factory[patch]] JAAS.getObjectInstance, null
[Container factory[patch]] -> org.jnp.interfaces.NamingContext@4d2e33
[Container factory[patch]] JaasSecurityManagerService()
[Container factory[patch]] JAAS.getObjectInstance, test-domain
[Container factory[patch]] ->
org.jboss.security.plugins.SubjectSecurityManager@37d090
[Container factory[patch]] setStatelessSecurityProxy,
org.jboss.test.security.test.ejbs.project.ProjRepositoryStatelessProxy@3a5c7a
[Container factory[patch]] setStatefulSecurityProxy,
org.jboss.test.security.test.ejbs.project.ProjRepositoryStatefulProxy@5e0873
[Container factory[patch]] Created SecurityInterceptor[patch]
[Container factory[patch]] Deploying StatelessSession
[Container factory[patch]] lookup securityManager name: java:/jaas/test-domain
[Container factory[patch]] JaasSecurityManagerService()
[Container factory[patch]] JAAS.getObjectInstance, null
[Container factory[patch]] -> org.jnp.interfaces.NamingContext@6328e0
[Container factory[patch]] JaasSecurityManagerService()
[Container factory[patch]] JAAS.getObjectInstance, test-domain
[Container factory[patch]] ->
org.jboss.security.plugins.SubjectSecurityManager@37d090
[Container factory[patch]] JaasSecurityManagerService()
[Container factory[patch]] JAAS.getObjectInstance, null
[Container factory[patch]] -> org.jnp.interfaces.NamingContext@10c06f
[Container factory[patch]] JaasSecurityManagerService()
[Container factory[patch]] JAAS.getObjectInstance, test-domain
[Container factory[patch]] ->
org.jboss.security.plugins.SubjectSecurityManager@37d090
[Container factory[patch]] Created SecurityInterceptor[patch]
[Container factory[patch]] Deploying StatelessSession2
[Container factory[patch]] lookup securityManager name: java:/jaas/test-domain
[Container factory[patch]] JaasSecurityManagerService()
[Container factory[patch]] JAAS.getObjectInstance, null
[Container factory[patch]] -> org.jnp.interfaces.NamingContext@31fbf4
[Container factory[patch]] JaasSecurityManagerService()
[Container factory[patch]] JAAS.getObjectInstance, test-domain
[Container factory[patch]] ->
org.jboss.security.plugins.SubjectSecurityManager@37d090
[Container factory[patch]] JaasSecurityManagerService()
[Container factory[patch]] JAAS.getObjectInstance, null
[Container factory[patch]] -> org.jnp.interfaces.NamingContext@148662
[Container factory[patch]] JaasSecurityManagerService()
[Container factory[patch]] JAAS.getObjectInstance, test-domain
[Container factory[patch]] ->
org.jboss.security.plugins.SubjectSecurityManager@37d090
[Container factory[patch]] Created SecurityInterceptor[patch]
[Bean Cache] Cache policy scheduler started
[Container factory[patch]] Deployed application:
file:/D:/tmp/cvs/jboss/dist/tmp/deploy/Default/secure-ejbs.jar/ejb1001.jar
[J2EE Deployer Default] J2EE application:
file:/D:/tmp/cvs/jboss/dist/deploy/secure-ejbs.jar is deployed.
...
[Service Control] Started 25 services
[Default] JBoss PRE-2.1 Started in 0m:10s
</pre>
There should not be any errors and you should see all of the above
with the only
difference being the file paths.
</ol>
<li>Test the SRPLoginModule by executing the run-login-test task
<ul>
<li>Client side
<pre>
1402>build.bat /tmp/cvs/jboss run-login-test
Buildfile: build.xml
init:
[echo] Using basedir=D:\usr\local\src\cvsroot\jBoss\contrib\security
validate:
compile:
run-login-test:
[java] policyName tst-policy.xml ->
file:/D:/usr/local/src/cvsroot/jBoss/contrib/security/src/main/resources/tst-policy.xml
[java] Added module-option name=principal, value=starksm
[java] grant, cs=(null <no certificates>); principals=scott;
permissions=[(org.jboss.test.security.test.NamespacePermission Project1 rwxd),
(org.jboss.test.security.test.NamespacePermission Project1/Documents/Private rw-d)]
[java] grant, cs=(null <no certificates>); principals=starksm;
permissions=[(org.jboss.test.security.test.NamespacePermission
Project1/Documents/Public r---)]
[java] Added module-option name=password-stacking, value=useFirstPass
[java] Added module-option name=principalClassName,
value=org.jboss.security.SimplePrincipal
[java] Added module-option name=srpServerJndiName, value=SRPServerInterface
[java] Added module-option name=debug, value=true
[java] Added module-option name=password-stacking, value=useFirstPass
[java] Getting SRP parameters for username: scott
[java] Creating SRPClientSession
[java] Generating client public key
[java] Exchanging public keys
[java] Generating server challenge
[java] Exchanging challenges
[java] Verifying server response
[java] Login succeeded
[java] Subject=Subject:
[java] Principal: scott
[java]
BUILD SUCCESSFUL
</pre>
<li>Server Side
<pre>
[SRPService] getSRPParameters, scott
[SRPService] init, scott
[SRPService] verify, scott
</pre>
</ul>
<li>Test the security proxy layer by running the run-project-test task. This
attempts
to access the ProjRepository session bean using four different users, each of
which have varying degrees of permissions. There is a lot of output produced
on the
client side and even more on the server side. The client side is shown below to
illustrate what you should be seeing if the security patch has been installed
correctly.
<ul>
<li>Client side
<pre>
1413>build.bat /tmp/cvs/jboss run-project-test
Buildfile: build.xml
init:
[echo] Using basedir=D:\usr\local\src\cvsroot\jBoss\contrib\security
validate:
compile:
run-project-test:
[java] Running single-threaded with sequential logins
[java] Running as user: scott
[java] Created LoginContext, username=scott
[java] Getting SRP parameters for username: scott
[java] Creating SRPClientSession
[java] Generating client public key
[java] Exchanging public keys
[java] Generating server challenge
[java] Exchanging challenges
[java] Verifying server response
[java] Login succeeded
[java] Login complete
[java] Found ProjRepositoryHome
[java] Created ProjRepository
[java] Test of getItem()
[java] getItem(Project1/Drawings/view1.jpg) -> {contentType=contentType:
image/jpeg, name=name: view1.jpg, owner=owner: scott, isFolder=isFolder: false}
[java] Test of deleteItem()
[java] deleteItem(Project1/Documents/Public/readme.txt) succeeded
[java] Security Failure: RemoteException occurred in server thread;
nestedexception is:
[java] javax.transaction.TransactionRolledbackException:
checkStatelessSecurity; nested exception is:
[java] java.lang.SecurityException: User: scott is not the owner of:
Project1/Documents/Public/starksm/.bashrc; nested exception is:
[java] java.rmi.RemoteException: checkStatelessSecurity; nested exception
is:
[java] java.lang.SecurityException: User: scott is not the owner of:
Project1/Documents/Public/starksm/.bashrc
[java] User logged out
[java] Running as user: starksm
[java] Created LoginContext, username=starksm
[java] Getting SRP parameters for username: starksm
[java] Creating SRPClientSession
[java] Generating client public key
[java] Exchanging public keys
[java] Generating server challenge
[java] Exchanging challenges
[java] Verifying server response
[java] Login succeeded
[java] Login complete
[java] Found ProjRepositoryHome
[java] Created ProjRepository
[java] Test of getItem()
[java] Security Failure: RemoteException occurred in server thread;
nestedexception is:
[java] javax.transaction.TransactionRolledbackException:
checkStatelessSecurity; nested exception is:
[java] java.security.AccessControlException: access denied
(org.jboss.test.security.test.NamespacePermission Project1/Drawings/view1.jpg r---);
nested exception is:
[java] java.rmi.RemoteException: checkStatelessSecurity; nested exception
is:
[java] java.security.AccessControlException: access denied
(org.jboss.test.security.test.NamespacePermission Project1/Drawings/view1.jpg r---)
[java] Running as user: guest
[java] Created LoginContext, username=guest
[java] Getting SRP parameters for username: guest
[java] Creating SRPClientSession
[java] Generating client public key
[java] Exchanging public keys
[java] Generating server challenge
[java] Exchanging challenges
[java] Verifying server response
[java] Login succeeded
[java] Login complete
[java] Found ProjRepositoryHome
[java] Created ProjRepository
[java] Test of getItem()
[java] Security Failure: RemoteException occurred in server thread;
nestedexception is:
[java] javax.transaction.TransactionRolledbackException:
checkStatelessSecurity; nested exception is:
[java] java.security.AccessControlException: access denied
(org.jboss.test.security.test.NamespacePermission Project1/Drawings/view1.jpg r---);
nested exception is:
[java] java.rmi.RemoteException: checkStatelessSecurity; nested exception
is:
[java] java.security.AccessControlException: access denied
(org.jboss.test.security.test.NamespacePermission Project1/Drawings/view1.jpg r---)
[java] Running as user: nobody
[java] Created LoginContext, username=nobody
[java] Getting SRP parameters for username: nobody
[java] security.srp.NoSuchUserException: Unknown username: nobody
[java] at
sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:245)
[java] at
sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:220)
[java] at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:122)
[java] at
security.srp.protocol.SRPRemoteServer_Stub.getSRPParameters(Unknown Source)
[java] at java.lang.reflect.Method.invoke(Native Method)
[java] at
org.jboss.security.plugins.SRPServerProxy.invoke(SRPServerProxy.java:45)
[java] at $Proxy0.getSRPParameters(Unknown Source)
[java] at
security.srp.protocol.jaas.SRPLoginModule.login(SRPLoginModule.java:144)
[java] at java.lang.reflect.Method.invoke(Native Method)
[java] at
javax.security.auth.login.LoginContext.invoke(LoginContext.java:595)
[java] at
javax.security.auth.login.LoginContext.access$000(LoginContext.java:125)
[java] at
javax.security.auth.login.LoginContext$3.run(LoginContext.java:531)
[java] at java.security.AccessController.doPrivileged(Native Method)
[java] at
javax.security.auth.login.LoginContext.invokeModule(LoginContext.java:528)
[java] at
javax.security.auth.login.LoginContext.login(LoginContext.java:449)
[java] at
org.jboss.test.security.test.ProjRepositoryMain.runAs(ProjRepositoryMain.java:32)
[java] at
org.jboss.test.security.test.ProjRepositoryMain.main(ProjRepositoryMain.java:117)
[java] Login failed
[java] javax.security.auth.login.LoginException: Failed complete SRP login,
msg=Unknown username: nobody
[java] at
security.srp.protocol.jaas.SRPLoginModule.login(SRPLoginModule.java:159)
[java] at java.lang.reflect.Method.invoke(Native Method)
[java] at
javax.security.auth.login.LoginContext.invoke(LoginContext.java:595)
[java] at
javax.security.auth.login.LoginContext.access$000(LoginContext.java:125)
[java] at
javax.security.auth.login.LoginContext$3.run(LoginContext.java:531)
[java] at java.security.AccessController.doPrivileged(Native Method)
[java] at
javax.security.auth.login.LoginContext.invokeModule(LoginContext.java:528)
[java] at
javax.security.auth.login.LoginContext.login(LoginContext.java:449)
[java] at
org.jboss.test.security.test.ProjRepositoryMain.runAs(ProjRepositoryMain.java:32)
[java] at
org.jboss.test.security.test.ProjRepositoryMain.main(ProjRepositoryMain.java:117)
BUILD SUCCESSFUL
Total time: 21 seconds</pre>
</ul>
</ol>
</body>
</html>
1.1 contrib/security/docs/SRP_LICENSE
Index: SRP_LICENSE
===================================================================
Licensing
---------
SRP is royalty-free worldwide for commercial and non-commercial use.
The SRP library has been carefully written not to depend on any
encumbered algorithms, and it is distributed under a standard
X11-style Open Source license which is shown below. This license
covers implementations based on the SRP library as well as
independent implementations based on RFC 2945.
The SRP distribution itself contains algorithms and code from
various freeware packages; these parts fall under both the SRP
Open Source license and the packages' own licenses. Care has
been taken to ensure that these licenses are compatible with
Open Source distribution, but it is the responsibility of the
licensee to comply with the terms of these licenses. This
disclaimer also applies to third-party libraries that may be
linked into the distribution, since they may contain patented
intellectual property. The file "Copyrights" contains a list
of the copyrights incorporated by portions of the software.
Broader use of the SRP authentication technology, such as variants
incorporating the use of an explicit server secret (SRP-Z), may
require a license; please contact the Stanford Office of Technology
Licensing (http://otl.stanford.edu/) for more information about
terms and conditions.
This software is covered under the following copyright:
/*
* Copyright (c) 1997-2000 The Stanford SRP Authentication Project
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
*
* IN NO EVENT SHALL STANFORD BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
* INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
* THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
* In addition, the following conditions apply:
*
* 1. Any software that incorporates the SRP authentication technology
* must display the following acknowlegment:
* "This product uses the 'Secure Remote Password' cryptographic
* authentication system developed by Tom Wu ([EMAIL PROTECTED])."
*
* 2. Any software that incorporates all or part of the SRP distribution
* itself must also display the following acknowledgment:
* "This product includes software developed by Tom Wu and Eugene
* Jhong for the SRP Distribution (http://srp.stanford.edu/srp/)."
*
* 3. Redistributions in source or binary form must retain an intact copy
* of this copyright notice and list of conditions.
*/
Address all questions regarding this license to:
Tom Wu
[EMAIL PROTECTED]
1.1 contrib/security/docs/StatelessSIDiagram.gif
<<Binary file>>
1.1 contrib/security/docs/readme.html
Index: readme.html
===================================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Readme</title>
</head>
<body>
<h2>A JBoss Security Extension Layer</h2>
The contrib security is a work in progress that extends the current JBoss
security architecture to provide support for a security proxy layer. The
goal is to allow custom security to be added to an EJB as a layer that
is independent of the EJB business object. This is done by adding two
types of security proxies; a stateless proxy and a stateful proxy. Both
proxies implement the business interface method of the EJB and are
given the opportunity to perform security checks on a per method basis by
a patched version of org.jboss.ejb.plugins.SecurityInterceptor. The
difference between a stateless and stateful proxy is that a stateful proxy
has a reference to the EJB implementation object it is securing. See the
StatelessSIDiagram in the contrib/security/docs directory for a sequence
diagram illustrating the key steps in the method invocation security layer.
The basic extension is indepdent of JAAS, but the bulk of the contrib
work demonstrates a JAAS based version. The following elements are included
in the release:
<ul>
<li>A new SRPLoginModule that provide a crptographically secure login
mechanism. This is an implementation of the RFC2945, the 'Secure Remote
Password'
cryptographic authentication system developed by Tom Wu ([EMAIL PROTECTED]).
From an abstract of a paper by Wu:<br>
<cite>
... a new password authentication and key-exchange protocol suitable for
authenticating users and exchanging keys over an untrusted network. The
new protocol resists dictionary attacks mounted by either passive or active
network intruders, allowing, in principle, even weak passphrases to be used
safely. It also offers perfect forward secrecy, which protects past sessions
and passwords against future compromises. Finally, user passwords are stored
in a form that is not plaintext-equivalent to the password itself, so an
attacker who captures the password database cannot use it directly to
compromise security and gain immediate access to the host. This new protocol
combines techniques of zero-knowledge proofs with asymmetric key exchange
protocols and offers significantly improved performance over comparably
strong extended methods that resist stolen-verifier attacks such as
Augmented
EKE or B-SPEKE.
</cite><br>
See <a href="http://www-cs-students.stanford.edu/~tjw/srp/">
http://www-cs-students.stanford.edu/~tjw/srp/</a> for details on SRP.
<li>A custom implementation of the javax.security.auth.Policy and
javax.security.auth.login.Configuration classes that combines the notions
of user authentication and authorization into a multiple security domain
notion. Each security domain can define its own login module stack and user
based permissions. The authentication and authorization information is
accessed through a store abstraction(IAppPolicyStore) that allows for
integrating with arbitrary security stores.
<li>An XML based implementation of IAppPolicyStore that allows for
security domain information to be represented by an XML document.
<li>A sample implementation of a JAAS based security proxy to demonstrate
the usage of the contrib security elements.
</ul>
<p>The contrib security code is currently implemented as a patch to JBoss.
You need a clean cvs snapshot of JBoss in order to build a JBoss server
that includes the security extensions. See the JAAS_Setup_Steps.html doc
in contrib/security/docs for the steps on building a patched JBoss server.
<p>The purpose of this release is to solicit feedback with regard to the
design and usability of the security proxy mechanism. One key question is
whether this should be integrated into the core JBoss layer or left as
an security extension. The design of JBoss can easily support both approaches.
<h2>Getting Started</h2>
To get started with the security extension layer, obtain the contrib security
snapshot from cvs:
<pre>
784>cvs -d :pserver:[EMAIL PROTECTED]:/products/cvs/ejboss login
(Logging in to [EMAIL PROTECTED])
CVS password: anon
785>cvs -d :pserver:[EMAIL PROTECTED]:/products/cvs/ejboss co
contrib/security
cvs server: Updating contrib/security
...
</pre>
You can either just browse the docs and source code, or build a patched JBoss
server by following the steps outlined in contrib/security/docs/JAAS_Setup_Steps.html
</body>
</html>
1.1 contrib/security/docs/security-policy.dtd
Index: security-policy.dtd
===================================================================
<?xml version='1.0' encoding='UTF-8' ?>
<!--Generated by XML Authority-->
<!-- The root element of the security-policy document. A security policy document
represents a
union of the Java2 codebase+signers and JAAS subject+codebased+signers policy files.
The
org.jboss.security.SecurityPolicy class parses a security-policy document using the
org.jboss.security.SecurityPolicyParser and implements both the java.security.Policy
and
javax.security.auth.Policy interfaces.
-->
<!ELEMENT application-policy (keystore? , authentication? , authorization?)>
<!ATTLIST application-policy name CDATA 'other' >
<!-- A grant element grants the indicated permissions -->
<!ELEMENT grant (principal* , permission+)>
<!ATTLIST grant codebase CDATA #IMPLIED
signedby CDATA #IMPLIED >
<!-- A principal element represents a named principal. The code attribute is a class
that implements
the java.security.Principal interface. The name attribute corresponds to the
Principal#getName()
value.
-->
<!ELEMENT principal EMPTY>
<!ATTLIST principal code CDATA #REQUIRED
name CDATA #REQUIRED >
<!-- The permission element represents a java.security.Permission implementation.
Its code
attribute is the name of the class that implements the java.security.Permission
interface.
-->
<!ELEMENT permission EMPTY>
<!ATTLIST permission code CDATA #REQUIRED
actions CDATA #IMPLIED
name CDATA #REQUIRED
signedby CDATA #IMPLIED >
<!-- The target element is the optional target-name of its parent permission
element. It is the
string that the java.security.Prinicpal#getName() method returns.
-->
<!ELEMENT target (#PCDATA)>
<!-- The actions element represents the optional actions of its parent permission
element. It is the
string that the java.security.Principal#getActions() method returns.
-->
<!ELEMENT actions (#PCDATA)>
<!ELEMENT keystore EMPTY>
<!ATTLIST keystore href CDATA '.keystore'
type CDATA 'JKS' >
<!ELEMENT authentication (login-module+)>
<!ELEMENT authorization (grant+)>
<!ELEMENT login-module (module-option*)>
<!ATTLIST login-module code CDATA #REQUIRED
flag (required | requisite | sufficient | optional )
'required' >
<!ELEMENT module-option (#PCDATA)>
<!ATTLIST module-option name CDATA #REQUIRED >
<!ELEMENT policy (application-policy+)>
1.1 contrib/security/docs/security-policy.jpg
<<Binary file>>