Changeset 7506 for TI12-security


Ignore:
Timestamp:
22/09/10 16:05:15 (9 years ago)
Author:
pjkersha
Message:

Incomplete - task 12: ESG Yadis identity service discovery

  • Working HttpsClient? class enables client to set cert/key for SSL client authn
Location:
TI12-security/trunk/EsgYadisParser/src/esg/security
Files:
2 added
6 edited

Legend:

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

    r7493 r7506  
    8282                String trustStorePassphrase) throws DnWhitelistX509TrustMgrInitException { 
    8383        certificateDnWhiteList = null; 
    84         _init(trustStoreFilePath, trustStorePassphrase); 
     84        loadTrustStore(trustStoreFilePath, trustStorePassphrase); 
    8585    } 
    8686     
     
    9393     * @throws DnWhitelistX509TrustMgrInitException  
    9494     */ 
    95     protected void _init(String trustStoreFilePath, String trustStorePassphrase)  
     95    public void loadTrustStore(String trustStoreFilePath,  
     96                String trustStorePassphrase)  
    9697                throws DnWhitelistX509TrustMgrInitException { 
    9798        TrustManagerFactory tmf = null; 
     
    172173     
    173174    /** 
    174      * Instantiate based on property file settings 
     175     * Instantiate based on property file input stream 
    175176     *  
    176177     * @param propertiesFile properties file enables static setting of DN  
     
    180181     * getting default trust manager 
    181182     */ 
    182     public DnWhitelistX509TrustMgr(InputStream propertiesFile) throws  
     183    public DnWhitelistX509TrustMgr(InputStream propertiesFile)  
     184        throws DnWhitelistX509TrustMgrInitException { 
     185        loadProperties(propertiesFile); 
     186    } 
     187 
     188    /** 
     189     * Instantiate based on properties object 
     190     *  
     191     * @param applicationProps 
     192     * @throws DnWhitelistX509TrustMgrInitException 
     193     */ 
     194    public DnWhitelistX509TrustMgr(Properties applicationProps)  
     195        throws DnWhitelistX509TrustMgrInitException { 
     196        loadProperties(applicationProps); 
     197        } 
     198 
     199    /** 
     200     * Load properties from input stream 
     201     *  
     202     * @param propertiesFile 
     203     * @return 
     204     * @throws DnWhitelistX509TrustMgrInitException 
     205     */ 
     206    public Properties loadProperties(InputStream propertiesFile) throws  
    183207                        DnWhitelistX509TrustMgrInitException { 
    184208 
     
    192216                                        "Error loading properties file", e); 
    193217                } 
     218                loadProperties(applicationProps); 
     219                 
     220                return applicationProps; 
     221    } 
     222                 
     223    /** 
     224     * Load properties from Properties object 
     225     *  
     226     * @param applicationProps 
     227     * @throws DnWhitelistX509TrustMgrInitException 
     228     */ 
     229        public void loadProperties(Properties applicationProps)  
     230                throws DnWhitelistX509TrustMgrInitException { 
    194231                 
    195232                // Key store file may be null in which case standard locations are 
     
    220257                } 
    221258                 
    222         _init(trustStoreFilePath, trustStorePassphrase); 
     259        loadTrustStore(trustStoreFilePath, trustStorePassphrase); 
    223260    } 
    224261     
  • TI12-security/trunk/EsgYadisParser/src/esg/security/HttpsClient.java

    r7493 r7506  
    22 
    33import java.io.BufferedReader; 
     4import java.io.FileInputStream; 
     5import java.io.FileNotFoundException; 
    46import java.io.IOException; 
    57import java.io.InputStream; 
     
    1517import java.security.UnrecoverableKeyException; 
    1618import java.security.cert.CertificateException; 
     19import java.util.HashSet; 
     20import java.util.Properties; 
    1721 
    1822import javax.net.ssl.HttpsURLConnection; 
     
    2226import javax.net.ssl.SSLSocketFactory; 
    2327import javax.net.ssl.X509TrustManager; 
     28import javax.security.auth.x500.X500Principal; 
    2429 
    2530import esg.security.exceptions.DnWhitelistX509TrustMgrInitException; 
    2631import esg.security.exceptions.HttpsClientInitException; 
    27 import esg.security.openid2emailresolution.exceptions.AttributeServiceQueryException; 
     32import esg.security.exceptions.HttpsClientRetrievalException; 
    2833 
    2934public class HttpsClient { 
     
    3237        protected static String KEYSTORE_TYPE = "JKS"; 
    3338        protected static String KEYMGR_FACTORY_TYPE = "SunX509"; 
     39        protected static String KEYSTORE_FILEPATH_PROP_NAME =  
     40                HttpsClient.class.getName() + ".keyStoreFilePath"; 
     41        protected static String KEYSTORE_PASSPHRASE_PROP_NAME =  
     42                HttpsClient.class.getName() + ".keyStorePassphrase"; 
     43        protected String keyStoreFilePath; 
     44        protected String keyStorePassphrase; 
    3445         
    3546        public HttpsClient(InputStream propertiesFile)  
    3647                throws HttpsClientInitException { 
    37                 String keyStorePassphrase = null; 
    38                 InputStream keyStoreFile = null; 
    39                  
    40                 loadKeyStore(keyStoreFile, keyStorePassphrase); 
    41         } 
    42          
    43         public HttpsClient(InputStream keyStoreFile, String keyStorePassphrase)  
    44                 throws HttpsClientInitException { 
    45                 loadKeyStore(keyStoreFile, keyStorePassphrase); 
    46         } 
    47          
    48         protected void loadTrustMgr(InputStream propertiesFile) throws HttpsClientInitException { 
     48                keyStorePassphrase = null; 
     49                keyStoreFilePath = null; 
     50                 
     51                Properties props = loadProperties(propertiesFile); 
     52                 
     53                InputStream keyStoreIStream = null; 
     54                try { 
     55                        keyStoreIStream = new FileInputStream(keyStoreFilePath); 
     56                         
     57                } catch (FileNotFoundException e) { 
     58                        throw new HttpsClientInitException("Error reading "+ 
     59                                        "\"" + keyStoreFilePath + "\" keystore", e); 
     60                } 
     61                loadKeyStore(keyStoreIStream, keyStorePassphrase); 
     62                loadTrustMgr(props); 
     63        } 
     64         
     65        public HttpsClient(InputStream keyStoreIStream, String keyStorePassphrase, 
     66                        DnWhitelistX509TrustMgr x509TrustMgr)  
     67                throws HttpsClientInitException { 
     68                loadKeyStore(keyStoreIStream, keyStorePassphrase); 
     69                this.x509TrustMgr = x509TrustMgr; 
     70        } 
     71         
     72        protected Properties loadProperties(InputStream propertiesFile)  
     73                throws HttpsClientInitException { 
     74        // create application properties with default 
     75        Properties applicationProps = new Properties(); 
     76         
     77        try { 
     78                        applicationProps.load(propertiesFile); 
     79                } catch (IOException e) { 
     80                        throw new HttpsClientInitException( 
     81                                        "Error loading properties file", e); 
     82                } 
     83                 
     84                // Key store file may be null in which case standard locations are 
     85                // searched instead 
     86                keyStoreFilePath = applicationProps.getProperty( 
     87                                KEYSTORE_FILEPATH_PROP_NAME, null); 
     88                 
     89                keyStorePassphrase = applicationProps.getProperty( 
     90                                KEYSTORE_PASSPHRASE_PROP_NAME, null); 
     91                 
     92                return applicationProps; 
     93        } 
     94         
     95        /** 
     96         * Instantiate trust manager from existing properties 
     97         *  
     98         * @param properties 
     99         * @throws HttpsClientInitException 
     100         */ 
     101        protected void loadTrustMgr(Properties properties)  
     102                throws HttpsClientInitException { 
    49103                // Create trust managers with given whitelist and keystore settings 
    50104                // read from appropriate properties files 
    51105                try { 
    52                         x509TrustMgr = new DnWhitelistX509TrustMgr(propertiesFile); 
     106                        x509TrustMgr = new DnWhitelistX509TrustMgr(properties); 
    53107                         
    54108                } catch (DnWhitelistX509TrustMgrInitException e) { 
     
    57111        } 
    58112         
    59         protected void loadKeyStore(InputStream keyStoreFile, String keyStorePassphrase)  
     113        protected void loadKeyStore(InputStream keyStoreIStream,  
     114                        String keyStorePassphrase)  
    60115                throws HttpsClientInitException { 
    61116                 
     
    63118                // attribute service query 
    64119                keyManagers = null; 
    65                 if (keyStoreFile != null) { 
     120                if (keyStoreIStream != null) { 
    66121                        KeyStore keyStore = null; 
    67122                        try { 
     
    74129                         
    75130                        try { 
    76                                 keyStore.load(keyStoreFile, keyStorePassphrase.toCharArray()); 
     131                                keyStore.load(keyStoreIStream, keyStorePassphrase.toCharArray()); 
    77132                                 
    78133                        } catch (NoSuchAlgorithmException e) { 
     
    128183         * @param keyStorePassphrase 
    129184         * @return 
    130          * @throws AttributeServiceQueryException 
     185         * @throws HttpsClientRetrievalException 
    131186         */ 
    132         public String httpsRetrieve(URL uri, String query, String requestMethod) 
    133                         throws AttributeServiceQueryException { 
     187        public String retrieve(URL uri, String query, String requestMethod) 
     188                        throws HttpsClientRetrievalException { 
    134189                 
    135190                // Enable defaults for HTTP request method 
     
    145200                         
    146201                } catch (NoSuchAlgorithmException e) { 
    147                         throw new AttributeServiceQueryException("Getting SSL context", e); 
     202                        throw new HttpsClientRetrievalException("Getting SSL context", e); 
    148203                } 
    149204                 
     
    153208                         
    154209                } catch (KeyManagementException e) { 
    155                         throw new AttributeServiceQueryException("Initialising SSL context",  
     210                        throw new HttpsClientRetrievalException("Initialising SSL context",  
    156211                                                                                                         e); 
    157212                } 
     
    162217                        connection = (HttpsURLConnection)uri.openConnection(); 
    163218                } catch (IOException e) { 
    164                         throw new AttributeServiceQueryException("Making connection", e); 
     219                        throw new HttpsClientRetrievalException("Making connection", e); 
    165220                } 
    166221                connection.setSSLSocketFactory(socketFactory); 
     
    170225                        connection.setRequestMethod(requestMethod); 
    171226                } catch (ProtocolException e) { 
    172                         throw new AttributeServiceQueryException( 
     227                        throw new HttpsClientRetrievalException( 
    173228                                        "Setting HTTP request method to \"POST\"", e); 
    174229                } 
     
    179234                                ops = connection.getOutputStream(); 
    180235                        } catch (IOException e) { 
    181                                 throw new AttributeServiceQueryException( 
     236                                throw new HttpsClientRetrievalException( 
    182237                                        "Getting output stream for query", e); 
    183238                        } 
     
    189244                                osw.close(); 
    190245                        } catch (IOException e) { 
    191                                 throw new AttributeServiceQueryException( 
     246                                throw new HttpsClientRetrievalException( 
    192247                                        "Error writing query for dispatch", e); 
    193248                        } 
     
    198253                        ins = connection.getInputStream(); 
    199254                } catch (IOException e) { 
    200                         throw new AttributeServiceQueryException("Getting input stream", e); 
     255                        throw new HttpsClientRetrievalException("Getting input stream", e); 
    201256                } 
    202257                 
     
    213268                        in.close(); 
    214269                } catch (IOException e) { 
    215                         throw new AttributeServiceQueryException("Reading content", e); 
     270                        throw new HttpsClientRetrievalException("Reading content", e); 
    216271                } 
    217272 
  • TI12-security/trunk/EsgYadisParser/src/esg/security/exceptions/HttpsClientInitException.java

    r7493 r7506  
    44 * Earth System Grid/CMIP5 
    55 * 
    6  * Date: 09/08/10 
     6 * Date: 21/09/10 
    77 *  
    88 * Copyright: (C) 2010 Science and Technology Facilities Council 
  • TI12-security/trunk/EsgYadisParser/src/esg/security/openid2emailresolution

    • Property svn:ignore
      •  

        old new  
        11attribute-service-client.ks 
        22yadis-retrieval.ks 
         3attribute-service-client-keystore.ks 
         4attribute-service-client-truststore.ks 
         5yadis-retrieval-truststore.ks 
  • TI12-security/trunk/EsgYadisParser/src/esg/security/openid2emailresolution/OpenId2EmailAddrResolution.java

    r7493 r7506  
    5858 
    5959import esg.security.DnWhitelistX509TrustMgr; 
     60import esg.security.HttpsClient; 
    6061import esg.security.exceptions.DnWhitelistX509TrustMgrInitException; 
     62import esg.security.exceptions.HttpsClientInitException; 
     63import esg.security.exceptions.HttpsClientRetrievalException; 
    6164import esg.security.openid2emailresolution.exceptions.AttributeServiceQueryException; 
    6265import esg.security.openid2emailresolution.exceptions.NoMatchingXrdsServiceException; 
     
    7982        private String attributeServiceType; 
    8083        private DnWhitelistX509TrustMgr yadisX509TrustMgr; 
    81         private DnWhitelistX509TrustMgr attributeServiceClientX509TrustMgr; 
     84        private HttpsClient httpsClient; 
    8285        public static final String DEF_ATTRIBUTE_SERVICE_XRD_SERVICE_TYPE =  
    8386                "urn:esg:security:attribute-service"; 
     
    9093         * @param yadisPropertiesFile 
    9194         * @param attributeServiceClientPropertiesFile 
    92          * @param keyStoreFile 
    93          * @param keyStorePassphrase 
    9495         * @throws YadisRetrievalException 
    9596         */ 
    9697        public OpenId2EmailAddrResolution(String attributeServiceType, 
    9798                        InputStream yadisPropertiesFile,  
    98                         InputStream attributeServiceClientPropertiesFile, 
    99                         InputStream keyStoreFile, 
    100                         String keyStorePassphrase)  
     99                        InputStream attributeServiceClientPropertiesFile)  
    101100                                throws DnWhitelistX509TrustMgrInitException { 
    102101                 
     
    112111                 
    113112                try { 
    114                         attributeServiceClientX509TrustMgr = new DnWhitelistX509TrustMgr( 
    115                                         attributeServiceClientPropertiesFile); 
    116                          
    117                 } catch (DnWhitelistX509TrustMgrInitException e) { 
    118                         throw new DnWhitelistX509TrustMgrInitException("Creating trust " + 
    119                                         "manager for Attribute Service query", e); 
     113                        httpsClient = new HttpsClient(attributeServiceClientPropertiesFile); 
     114                         
     115                } catch (HttpsClientInitException e) { 
     116                        throw new DnWhitelistX509TrustMgrInitException("Creating HTTPS " + 
     117                                        "client for Attribute Service query", e); 
    120118                } 
    121119 
     
    127125         
    128126        public OpenId2EmailAddrResolution(InputStream yadisPropertiesFile,  
    129                         InputStream attributeServiceClientPropertiesFile, 
    130                         InputStream keyStore, 
    131                         String keyStorePassphrase)  
     127                        InputStream attributeServiceClientPropertiesFile)  
    132128        throws DnWhitelistX509TrustMgrInitException { 
    133                 this(null, yadisPropertiesFile, attributeServiceClientPropertiesFile, 
    134                         keyStore, keyStorePassphrase); 
     129                this(null, yadisPropertiesFile, attributeServiceClientPropertiesFile); 
    135130        } 
    136131         
     
    222217                                        "query to " + attributeServiceEndpoint + " for OpenID", e);                      
    223218                } 
    224                 String response = httpsRetrieve(attributeServiceEndpoint, query, null); 
     219                 
     220                String response = null; 
     221                try { 
     222                        response = httpsClient.retrieve(attributeServiceEndpoint, query, null); 
     223                         
     224                } catch (HttpsClientRetrievalException e) { 
     225                        throw new AttributeServiceQueryException("Sent attribute query", e); 
     226                } 
     227                 
    225228                SAMLAttributesImpl samlAttrs = null; 
    226229                try { 
     
    270273                                                                "attribute-service-client-ssl.properties"); 
    271274                 
    272                 InputStream keyStoreFile =  
    273                         OpenId2EmailAddrResolution.class.getResourceAsStream( 
    274                                                                 "attribute-service-client-truststore.ks"); 
    275                 String keyStorePassphrase = "importkey"; 
    276275                OpenId2EmailAddrResolution openid2EmailAddr = new  
    277276                        OpenId2EmailAddrResolution(yadisPropertiesFile,  
    278                                         attributeServiceClientPropertiesFile, 
    279                                         keyStoreFile, 
    280                                         keyStorePassphrase); 
     277                                        attributeServiceClientPropertiesFile); 
    281278                 
    282279//              URL yadisURL = new URL("https://ceda.ac.uk/openid/Philip.Kershaw"); 
  • TI12-security/trunk/EsgYadisParser/src/esg/security/openid2emailresolution/attribute-service-client-ssl.properties

    r7493 r7506  
    1414# @author pjkersha 
    1515# @version $Revision$ 
    16 esg.security.DnWhitelistX509TrustMgr.trustStoreFilePath = /home/pjkersha/workspace/EsgYadisParser/src/esg/security/openid2emailresolution/attribute-service-client.ks 
     16esg.security.HttpsClient.keyStoreFilePath = /home/pjkersha/workspace/EsgYadisParser/src/esg/security/openid2emailresolution/attribute-service-client-keystore.ks 
     17esg.security.HttpsClient.keyStorePassphrase = importkey 
     18esg.security.DnWhitelistX509TrustMgr.trustStoreFilePath = /home/pjkersha/workspace/EsgYadisParser/src/esg/security/openid2emailresolution/attribute-service-client-truststore.ks 
    1719esg.security.DnWhitelistX509TrustMgr.trustStorePassphrase = testpass 
    1820esg.security.DnWhitelistX509TrustMgr.dn0 = CN=ceda.ac.uk, OU=RAL-SPBU, O=Science and Technology Facilities Council, C=GB 
Note: See TracChangeset for help on using the changeset viewer.