Changeset 7309 for TI12-security


Ignore:
Timestamp:
10/08/10 11:30:17 (9 years ago)
Author:
pjkersha
Message:

Incomplete - task 12: ESG Yadis identity service discovery

  • keystore settings can now be made in properties file for DN whitelist trust manager.
  • YadisRetrieval? class now has constructor to support input from this properties file.


Location:
TI12-security/trunk/EsgYadisParser/src/org/earthsystemgrid/security
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/EsgYadisParser/src/org/earthsystemgrid/security/DnWhitelistX509TrustMgr.java

    r7308 r7309  
    4848public class DnWhitelistX509TrustMgr implements X509TrustManager { 
    4949 
     50        protected static String KEYSTORE_FILEPATH_PROP_NAME =  
     51                DnWhitelistX509TrustMgr.class.getName() + ".keyStoreFilePath"; 
     52        protected static String KEYSTORE_PASSPHRASE_PROP_NAME =  
     53                DnWhitelistX509TrustMgr.class.getName() + ".keyStorePassphrase"; 
     54        protected static String DN_PROP_NAME = DnWhitelistX509TrustMgr.class.getName() + ".dn"; 
     55         
    5056        protected static String BASE_TRUST_MGR_ID = "PKIX"; 
    5157        protected static String KEYSTORE_TYPE = "JKS"; 
    52         protected static String DN_PROP_NAME = DnWhitelistX509TrustMgr.class + "dn"; 
    5358         
    5459        /** 
     
    7782    public DnWhitelistX509TrustMgr(String keyStoreFilePath, 
    7883                String keyStorePassphrase) throws DnWhitelistX509TrustMgrInitException { 
    79  
    8084        certificateDnWhiteList = null; 
     85        _init(keyStoreFilePath, keyStorePassphrase); 
     86    } 
     87     
     88    /** 
     89     * Initialise key store and default trust manager which is wrapped by this 
     90     * class 
     91     *  
     92     * @param keyStoreFilePath 
     93     * @param keyStorePassphrase 
     94     * @throws DnWhitelistX509TrustMgrInitException  
     95     */ 
     96    protected void _init(String keyStoreFilePath, String keyStorePassphrase)  
     97                throws DnWhitelistX509TrustMgrInitException { 
    8198        TrustManagerFactory tmf = null; 
    8299                try { 
     
    159176     * Instantiate based on property file settings 
    160177     *  
    161      * @param keyStoreFilePath key store file path 
    162      * @param keyStorePassphrase pass-phrase for this key store - use null if 
    163      * none set 
    164178     * @param propertiesFile properties file enables static setting of DN  
    165179     * whitelist - the list of peer certificate distinguished  
     
    168182     * getting default trust manager 
    169183     */ 
    170     public DnWhitelistX509TrustMgr(String keyStoreFilePath, 
    171                 String keyStorePassphrase, 
    172                 InputStream propertiesFile) throws  
     184    public DnWhitelistX509TrustMgr(InputStream propertiesFile) throws  
    173185                        DnWhitelistX509TrustMgrInitException { 
    174         this(keyStoreFilePath, keyStorePassphrase); 
    175186 
    176187        // create application properties with default 
     
    184195                } 
    185196                 
    186                 // DN values are stored in the property file as e.g. 
    187                 // 
    188                 // DnWhitelistX509TrustMgr.dn0 = ... 
    189                 // DnWhitelistX509TrustMgr.dn1 = ... 
    190                 // DnWhitelistX509TrustMgr.dn2 = ...  
    191                 // 
    192                 // ... etc.  
     197                // Key store file may be null in which case standard locations are 
     198                // searched instead 
     199                String keyStoreFilePath = applicationProps.getProperty( 
     200                        KEYSTORE_FILEPATH_PROP_NAME, null); 
     201                 
     202                String keyStorePassphrase = applicationProps.getProperty( 
     203                                KEYSTORE_PASSPHRASE_PROP_NAME, null); 
     204                 
     205                /*  
     206                 * DN values are stored in the property file as e.g. 
     207                 * 
     208                 * DnWhitelistX509TrustMgr.dn0 = ... 
     209                 * DnWhitelistX509TrustMgr.dn1 = ... 
     210                 * DnWhitelistX509TrustMgr.dn2 = ...  
     211                 * 
     212                 * ... etc.  
     213                 */ 
    193214                String dnValue = null; 
    194215                this.certificateDnWhiteList = new HashSet(); 
     
    200221                        this.certificateDnWhiteList.add(new X500Principal(dnValue)); 
    201222                } 
     223                 
     224        _init(keyStoreFilePath, keyStorePassphrase); 
    202225    } 
    203226     
     
    272295                X500Principal peerCertDN = null; 
    273296                 
    274                 if (certificateDnWhiteList == null) 
     297                if (certificateDnWhiteList == null || certificateDnWhiteList.isEmpty()) 
    275298                        return; 
    276299                 
     
    283306                                        return; 
    284307                } 
    285                 throw new CertificateException("No match for peer certificate " +  
    286                                 peerCertDN + "against Certificate DN whitelist"); 
     308                throw new CertificateException("No match for peer certificate \"" +  
     309                                peerCertDN + "\" against Certificate DN whitelist"); 
    287310        } 
    288311 
  • TI12-security/trunk/EsgYadisParser/src/org/earthsystemgrid/security/DnWhitelistX509TrustMgr.properties

    r7308 r7309  
    1414# @author pjkersha 
    1515# @version $Revision$ 
    16 DnWhitelistX509TrustMgr.dn0 = CN=ceda.ac.uk, OU=RAL-SPBU, O=Science and Technology Facilities Council, C=GB 
    17 DnWhitelistX509TrustMgr.dn1 = CN=localhost, OU=Test, O=Test Org 
     16org.earthsystemgrid.security.DnWhitelistX509TrustMgr.dn0 = CN=ceda.ac.uk, OU=RAL-SPBU, O=Science and Technology Facilities Council, C=GB 
     17org.earthsystemgrid.security.DnWhitelistX509TrustMgr.dn1 = CN=localhost, OU=Test, O=Test Org 
  • TI12-security/trunk/EsgYadisParser/src/org/earthsystemgrid/security/yadis/YadisRetrieval.java

    r7308 r7309  
    3737public class YadisRetrieval 
    3838{        
    39         public static String retrieve(URL yadisURL) throws YadisRetrievalException  
    40         { 
    41                 // Experimenting with Trust Manager for whitelisting 
    42                 X509TrustManager xtm; 
    43  
    44 //              X500Principal [] whitelist = { 
    45 //                              new X500Principal("CN=ceda.ac.uk, OU=RAL-SPBU, O=Science and Technology Facilities Council, C=GB") 
    46 //              }; 
     39        // Trust Manager enables DN whitelisting 
     40        protected X509TrustManager x509TrustMgr; 
     41         
     42        /** 
     43         * Initialise SSL connection properties 
     44         *  
     45         * @param propertiesFile input stream for properties file 
     46         * @throws YadisRetrievalException  
     47         */ 
     48        public YadisRetrieval(InputStream propertiesFile) throws YadisRetrievalException { 
    4749                 
    48                 InputStream propertiesFile =  
    49                         DnWhitelistX509TrustMgr.class.getResourceAsStream( 
    50                                                                         "DnWhitelistX509TrustMgr.properties"); 
    51                  
    52                 // Create trust manager with given whitelist and default keystore 
     50                // Create trust manager with given whitelist and keystore settings 
     51                // read from properties file 
    5352                try { 
    54                         xtm = new DnWhitelistX509TrustMgr(null, null, propertiesFile); 
     53                        x509TrustMgr = new DnWhitelistX509TrustMgr(propertiesFile); 
     54                         
    5555                } catch (DnWhitelistX509TrustMgrInitException e) { 
    5656                        throw new YadisRetrievalException("Creating trust manager", e); 
    5757                } 
    58                  
    59                 X509TrustManager tm[] = {xtm}; 
     58        } 
     59         
     60        /** 
     61         * Retrieve XRD document from Yadis endpoint 
     62         *  
     63         * @param yadisURL URL to retrieve content from 
     64         * @return string containing the XRD document at the given URL 
     65         * @throws YadisRetrievalException 
     66         */ 
     67        public String retrieve(URL yadisURL) throws YadisRetrievalException  
     68        {                
    6069                SSLContext ctx = null; 
    6170                try { 
     
    6675                } 
    6776                 
     77                X509TrustManager tm[] = {x509TrustMgr}; 
    6878                try { 
    6979                        ctx.init(null, tm, null); 
     
    7383                 
    7484                SSLSocketFactory socketFactory = ctx.getSocketFactory(); 
    75  
    7685                HttpsURLConnection connection = null; 
    7786                try { 
     
    107116        } 
    108117         
    109         // Retrieve and parse Yadis document returning the services it references 
     118        /** 
     119         *  Retrieve and parse Yadis document returning the services it references 
     120         *   
     121         * @param yadisURL URL to retrieve content from 
     122         * @param targetTypes retrieve only this subset of target (service types). 
     123         * See to null to retrieve all types. 
     124         * @return list of services for this Yadis endpoint 
     125         * @throws XrdsParseException error parsing XRD document 
     126         * @throws YadisRetrievalException error GETing the content 
     127         */ 
    110128        public List retrieveAndParse(URL yadisURL, Set targetTypes) throws  
    111129                XrdsParseException, YadisRetrievalException 
     
    121139        public static void main(String[] args) throws IOException 
    122140        { 
    123                 YadisRetrieval yadis = new YadisRetrieval(); 
     141                // Input Whitelist DNs as a string array 
     142                //      X500Principal [] whitelist = { 
     143                //      new X500Principal("CN=ceda.ac.uk, OU=RAL-SPBU, O=Science and Technology Facilities Council, C=GB") 
     144                //}; 
     145                 
     146                // Input DNs from a file 
     147                InputStream propertiesFile =  
     148                        DnWhitelistX509TrustMgr.class.getResourceAsStream( 
     149                                                                "DnWhitelistX509TrustMgr.properties"); 
     150 
     151                YadisRetrieval yadis = null; 
     152                try { 
     153                        yadis = new YadisRetrieval(propertiesFile); 
     154                } catch (YadisRetrievalException e) { 
     155                        // TODO Auto-generated catch block 
     156                        e.printStackTrace(); 
     157                } 
    124158                 
    125159                URL yadisURL = new URL("https://ceda.ac.uk/openid/Philip.Kershaw"); 
    126160//              URL yadisURL = new URL("https://localhost:7443/openid/PJKershaw"); 
     161                 
     162                // 1) Retrieve as string content 
    127163                String content = null; 
    128164                try { 
    129                         content = YadisRetrieval.retrieve(yadisURL); 
     165                        content = yadis.retrieve(yadisURL); 
     166                         
    130167                } catch (YadisRetrievalException e) { 
    131168                        // TODO Auto-generated catch block 
     
    135172                System.out.println("Yadis content = " + content); 
    136173                 
     174                // 2) Retrieve as list of services 
    137175                List<XrdsServiceElem> serviceElems = null; 
     176                 
     177                // Retrieve only services matching these type(s) 
    138178                String elem [] = {"urn:esg:security:attribute-service"}; 
    139179                Set<String> targetTypes = new HashSet(Arrays.asList(elem)); 
Note: See TracChangeset for help on using the changeset viewer.