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]]  -&gt; 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]]  -&gt; 
org.jboss.security.plugins.SubjectSecurityManager@37d090
  [Container factory[patch]] JaasSecurityManagerService()
  [Container factory[patch]] JAAS.getObjectInstance, null
  [Container factory[patch]]  -&gt; org.jnp.interfaces.NamingContext@5db314
  [Container factory[patch]] JaasSecurityManagerService()
  [Container factory[patch]] JAAS.getObjectInstance, test-domain
  [Container factory[patch]]  -&gt; 
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]]  -&gt; org.jnp.interfaces.NamingContext@712b3a
  [Container factory[patch]] JaasSecurityManagerService()
  [Container factory[patch]] JAAS.getObjectInstance, test-domain
  [Container factory[patch]]  -&gt; 
org.jboss.security.plugins.SubjectSecurityManager@37d090
  [Container factory[patch]] JaasSecurityManagerService()
  [Container factory[patch]] JAAS.getObjectInstance, null
  [Container factory[patch]]  -&gt; org.jnp.interfaces.NamingContext@4d2e33
  [Container factory[patch]] JaasSecurityManagerService()
  [Container factory[patch]] JAAS.getObjectInstance, test-domain
  [Container factory[patch]]  -&gt; 
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]]  -&gt; org.jnp.interfaces.NamingContext@6328e0
  [Container factory[patch]] JaasSecurityManagerService()
  [Container factory[patch]] JAAS.getObjectInstance, test-domain
  [Container factory[patch]]  -&gt; 
org.jboss.security.plugins.SubjectSecurityManager@37d090
  [Container factory[patch]] JaasSecurityManagerService()
  [Container factory[patch]] JAAS.getObjectInstance, null
  [Container factory[patch]]  -&gt; org.jnp.interfaces.NamingContext@10c06f
  [Container factory[patch]] JaasSecurityManagerService()
  [Container factory[patch]] JAAS.getObjectInstance, test-domain
  [Container factory[patch]]  -&gt; 
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]]  -&gt; org.jnp.interfaces.NamingContext@31fbf4
  [Container factory[patch]] JaasSecurityManagerService()
  [Container factory[patch]] JAAS.getObjectInstance, test-domain
  [Container factory[patch]]  -&gt; 
org.jboss.security.plugins.SubjectSecurityManager@37d090
  [Container factory[patch]] JaasSecurityManagerService()
  [Container factory[patch]] JAAS.getObjectInstance, null
  [Container factory[patch]]  -&gt; org.jnp.interfaces.NamingContext@148662
  [Container factory[patch]] JaasSecurityManagerService()
  [Container factory[patch]] JAAS.getObjectInstance, test-domain
  [Container factory[patch]]  -&gt; 
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 -&gt; 
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 &lt;no certificates&gt;); 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 &lt;no certificates&gt;); 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>>
  
  

Reply via email to