Changeset 7306 for TI12-security/trunk


Ignore:
Timestamp:
09/08/10 14:12:30 (9 years ago)
Author:
pjkersha
Message:

Incomplete - task 12: ESG Yadis identity service discovery

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

Legend:

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

    r7305 r7306  
    1515import javax.net.ssl.TrustManagerFactory; 
    1616import javax.net.ssl.X509TrustManager; 
     17import javax.security.auth.x500.X500Principal; 
     18 
     19import org.earthsystemgrid.security.exceptions.DnWhitelistX509TrustMgrInitException; 
    1720 
    1821 
    19 public class DnWhiteListBasedX509TrustManager implements X509TrustManager { 
     22public class DnWhitelistX509TrustMgr implements X509TrustManager { 
    2023 
    21         protected Principal [] certificateDnWhiteList; 
     24        protected X500Principal [] certificateDnWhiteList; 
    2225         
    2326    /* 
     
    2831    X509TrustManager pkixTrustManager; 
    2932 
    30     public DnWhiteListBasedX509TrustManager(Principal[] certificateDnWhiteList, 
     33    public DnWhitelistX509TrustMgr(X500Principal[] certificateDnWhiteList, 
    3134                String keyStoreFilePath, 
    32                 String keyStorePassphrase) throws Exception { 
     35                String keyStorePassphrase) throws DnWhitelistX509TrustMgrInitException { 
    3336 
    3437                this.certificateDnWhiteList = certificateDnWhiteList; 
     38         
     39        TrustManagerFactory tmf = null; 
     40                try { 
     41                        tmf = TrustManagerFactory.getInstance("PKIX"); 
     42                         
     43                } catch (NoSuchAlgorithmException e) { 
     44                        throw new DnWhitelistX509TrustMgrInitException("Instantiating "+ 
     45                                        "\"PKIX\" trust manager", e); 
     46                } 
    3547                 
    3648                FileInputStream kis = null; 
     49        KeyStore ks = null; 
    3750                 
    38                 if (keyStoreFilePath == null) 
    39                         kis = new FileInputStream("trustedCerts"); 
    40                 else 
    41                         kis = new FileInputStream(keyStoreFilePath); 
     51                if (keyStoreFilePath != null) 
     52                { 
     53                        try { 
     54                                kis = new FileInputStream(keyStoreFilePath); 
     55                                 
     56                        } catch (FileNotFoundException e) { 
     57                                // TODO Auto-generated catch block 
     58                                throw new DnWhitelistX509TrustMgrInitException("Error reading "+ 
     59                                                "\"" + keyStoreFilePath + "\" keystore", e); 
     60                        } 
    4261                 
    43                 // create a "default" JSSE X509TrustManager. 
    44         KeyStore ks = KeyStore.getInstance("JKS"); 
    45         ks.load(kis,  
    46                         keyStorePassphrase == null ?  
    47                                         null : keyStorePassphrase.toCharArray()); 
    48  
    49         TrustManagerFactory tmf = 
    50                TrustManagerFactory.getInstance("PKIX"); 
    51         tmf.init(ks); 
    52  
     62                        // Create a "default" JSSE X509TrustManager. 
     63                        try { 
     64                                ks = KeyStore.getInstance("JKS"); 
     65                                 
     66                        } catch (KeyStoreException e) { 
     67                                throw new DnWhitelistX509TrustMgrInitException("Instantiating "+ 
     68                                                "new Java keystore", e); 
     69                        } 
     70                         
     71                try { 
     72                                ks.load(kis, keyStorePassphrase == null ?  
     73                                                                null : keyStorePassphrase.toCharArray()); 
     74                                 
     75                        } catch (NoSuchAlgorithmException e) { 
     76                                throw new DnWhitelistX509TrustMgrInitException("Error reading "+ 
     77                                                "\"" + keyStoreFilePath + "\" keystore", e); 
     78         
     79                        } catch (CertificateException e) { 
     80                                throw new DnWhitelistX509TrustMgrInitException("Error reading "+ 
     81                                                "\"" + keyStoreFilePath + "\" keystore", e); 
     82         
     83                        } catch (IOException e) { 
     84                                throw new DnWhitelistX509TrustMgrInitException("Error reading "+ 
     85                                                "\"" + keyStoreFilePath + "\" keystore", e); 
     86                        } 
     87                } 
     88                 
     89        try { 
     90                        tmf.init(ks); 
     91                } catch (KeyStoreException e) { 
     92                        throw new DnWhitelistX509TrustMgrInitException("Initialising "+ 
     93                                        "\"PKIX\" trust manager", e); 
     94                } 
     95                 
    5396        TrustManager tms [] = tmf.getTrustManagers(); 
    5497 
    5598        /* 
    56          * Iterate over the returned trustmanagers, look 
    57          * for an instance of X509TrustManager.  If found, 
    58          * use that as our "default" trust manager. 
     99         * Iterate over the returned trustmanagers, look for an instance of  
     100         * X509TrustManager.  If found, use that as our "default" trust manager. 
    59101         */ 
    60         for (int i = 0; i < tms.length; i++) { 
    61             if (tms[i] instanceof X509TrustManager) { 
    62                 pkixTrustManager = (X509TrustManager) tms[i]; 
     102        for (Object tm : tms) { 
     103            if (tm instanceof X509TrustManager) { 
     104                pkixTrustManager = (X509TrustManager) tm; 
    63105                return; 
    64106            } 
     
    66108 
    67109        /* 
    68          * Find some other way to initialize, or else we have to fail the 
    69          * constructor. 
     110         * Got to here so no X509TrustManager was found 
    70111         */ 
    71         throw new Exception("Couldn't initialize"); 
     112        throw new DnWhitelistX509TrustMgrInitException("No X509TrustManager " + 
     113                        "found in trust manager factory instance"); 
    72114    } 
    73115 
     
    93135                // If chain is OK following previous check, then execute whitelisting of  
    94136        // DN 
    95                 Principal subject = null; 
     137                X500Principal peerCertDN = null; 
    96138                 
    97139                if (certificateDnWhiteList == null) 
     
    100142                for (X509Certificate cert : certList) 
    101143                { 
    102                         subject = cert.getSubjectDN(); 
     144                        peerCertDN = cert.getSubjectX500Principal(); 
    103145                         
    104146                        for (Principal dn : certificateDnWhiteList) 
    105                                 if (subject == dn) 
     147                                if (peerCertDN.equals(dn)) 
    106148                                        return; 
    107149                } 
    108150                throw new CertificateException("No match for peer certificate " +  
    109                                 subject + 
    110                                 "against Certificate DN whitelist"); 
     151                                peerCertDN + "against Certificate DN whitelist"); 
    111152        } 
    112153 
  • TI12-security/trunk/EsgYadisParser/src/org/earthsystemgrid/security/yadis/YadisRetrieval.java

    r7305 r7306  
    1919import javax.net.ssl.SSLSocketFactory; 
    2020import javax.net.ssl.X509TrustManager; 
     21import javax.security.auth.x500.X500Principal; 
    2122 
    22 import org.earthsystemgrid.security.DnWhiteListBasedX509TrustManager; 
     23import org.earthsystemgrid.security.DnWhitelistX509TrustMgr; 
     24import org.earthsystemgrid.security.exceptions.DnWhitelistX509TrustMgrInitException; 
    2325import org.earthsystemgrid.security.yadis.exception.XrdsParseException; 
    2426import org.earthsystemgrid.security.yadis.exception.YadisRetrievalException; 
     
    3537public class YadisRetrieval 
    3638{        
    37         public static String retrieve(URL yadisURL) throws IOException,  
    38                 NoSuchAlgorithmException, KeyManagementException, CertificateException,  
    39                 KeyStoreException 
     39        public static String retrieve(URL yadisURL) throws YadisRetrievalException  
    4040        { 
    4141                // Experimenting with Trust Manager for whitelisting 
    42                 X509TrustManager xtm = new DnWhiteListBasedX509TrustManager(null, null, null); 
     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                }; 
     47                 
     48                // Create trust manager with given whitelist and default keystore 
     49                try { 
     50                        xtm = new DnWhitelistX509TrustMgr(whitelist, null, null); 
     51                } catch (DnWhitelistX509TrustMgrInitException e) { 
     52                        throw new YadisRetrievalException("Creating trust manager", e); 
     53                } 
     54                 
    4355                X509TrustManager tm[] = {xtm}; 
    44                 SSLContext ctx = SSLContext.getInstance("SSL"); 
    45                 ctx.init(null, tm, null); 
     56                SSLContext ctx = null; 
     57                try { 
     58                        ctx = SSLContext.getInstance("SSL"); 
     59                         
     60                } catch (NoSuchAlgorithmException e) { 
     61                        throw new YadisRetrievalException("Getting SSL context", e); 
     62                } 
     63                 
     64                try { 
     65                        ctx.init(null, tm, null); 
     66                } catch (KeyManagementException e) { 
     67                        throw new YadisRetrievalException("Initialising SSL context", e); 
     68                } 
     69                 
    4670                SSLSocketFactory socketFactory = ctx.getSocketFactory(); 
    4771 
    48                 HttpsURLConnection connection = (HttpsURLConnection) 
    49                                                                                                         yadisURL.openConnection(); 
     72                HttpsURLConnection connection = null; 
     73                try { 
     74                        connection = (HttpsURLConnection)yadisURL.openConnection(); 
     75                } catch (IOException e) { 
     76                        throw new YadisRetrievalException("Making connection", e); 
     77                } 
    5078                connection.setSSLSocketFactory(socketFactory); 
    5179                                 
    52                 InputStream ins = connection.getInputStream(); 
     80                InputStream ins = null; 
     81                try { 
     82                        ins = connection.getInputStream(); 
     83                } catch (IOException e) { 
     84                        throw new YadisRetrievalException("Getting input stream", e); 
     85                } 
    5386            InputStreamReader isr = new InputStreamReader(ins); 
    5487            BufferedReader in = new BufferedReader(isr); 
     
    5689            String inputLine = null; 
    5790 
    58             while ((inputLine = in.readLine()) != null) 
    59             { 
    60                 buf.append(inputLine); 
    61                 buf.append(System.getProperty("line.separator")); 
    62             } 
    63             in.close(); 
     91            try { 
     92                        while ((inputLine = in.readLine()) != null) 
     93                        { 
     94                            buf.append(inputLine); 
     95                            buf.append(System.getProperty("line.separator")); 
     96                        } 
     97                        in.close(); 
     98                } catch (IOException e) { 
     99                        throw new YadisRetrievalException("Reading content", e); 
     100                } 
    64101 
    65102            return buf.toString(); 
     
    71108        { 
    72109                String yadisDocContent; 
    73                 try { 
    74                         yadisDocContent = retrieve(yadisURL); 
    75                 } catch (KeyManagementException e) { 
    76                         throw new YadisRetrievalException("Error retrieving " + yadisURL, e); 
    77                 } catch (NoSuchAlgorithmException e) { 
    78                         throw new YadisRetrievalException("Error retrieving " + yadisURL, e); 
    79                 } catch (CertificateException e) { 
    80                         throw new YadisRetrievalException("Error retrieving " + yadisURL, e); 
    81                 } catch (KeyStoreException e) { 
    82                         throw new YadisRetrievalException("Error retrieving " + yadisURL, e); 
    83                 } catch (IOException e) { 
    84                         throw new YadisRetrievalException("Error retrieving " + yadisURL, e); 
    85                 } 
     110                yadisDocContent = retrieve(yadisURL); 
    86111 
    87                 Xrds xrdsDoc = new XrdsDoc(); 
     112                XrdsDoc xrdsDoc = new XrdsDoc(); 
    88113                List serviceElems = xrdsDoc.parse(yadisDocContent, targetTypes); 
    89114                return serviceElems; 
     
    94119                YadisRetrieval yadis = new YadisRetrieval(); 
    95120                 
    96 //              URL yadisURL = new URL("https://ceda.ac.uk/openid/Philip.Kershaw"); 
    97                 URL yadisURL = new URL("https://localhost:7443/openid/PJKershaw"); 
     121                URL yadisURL = new URL("https://ceda.ac.uk/openid/Philip.Kershaw"); 
     122//              URL yadisURL = new URL("https://localhost:7443/openid/PJKershaw"); 
    98123                String content = null; 
    99124                try { 
    100125                        content = YadisRetrieval.retrieve(yadisURL); 
    101                 } catch (KeyManagementException e) { 
    102                         // TODO Auto-generated catch block 
    103                         e.printStackTrace(); 
    104                 } catch (NoSuchAlgorithmException e) { 
    105                         // TODO Auto-generated catch block 
    106                         e.printStackTrace(); 
    107                 } catch (CertificateException e) { 
    108                         // TODO Auto-generated catch block 
    109                         e.printStackTrace(); 
    110                 } catch (KeyStoreException e) { 
     126                } catch (YadisRetrievalException e) { 
    111127                        // TODO Auto-generated catch block 
    112128                        e.printStackTrace(); 
    113129                } 
    114                 System.out.println(content); 
     130 
     131                System.out.println("Yadis content = " + content); 
    115132                 
    116133                List<XrdsServiceElem> serviceElems = null; 
     
    128145                } 
    129146                 
     147                if (serviceElems.isEmpty()) 
     148                        System.out.println("No services found for " + elem[0] + " type"); 
     149                 
    130150                for (XrdsServiceElem serviceElem : serviceElems) 
    131151                        System.out.println(serviceElem); 
Note: See TracChangeset for help on using the changeset viewer.