The following comment has been added to this issue:

     Author: Brett Porter
    Created: Tue, 8 Jul 2003 2:53 AM
       Body:
HttpsUrlConnection is not a 1.4 class per se, it is a JSSE class, so it will work with 
JDK 1.3 + JSSE.

However, this code doesn't seem like the right way to do it. I haven't tried it but I 
believe maven should work as is if the following is true:
1) JSSE is properly installed (or using JDK 1.4)
2) jssecacerts contains the certificate of the host you are trying to contact, or some 
other keystore is in place

In my experience, setting up keystores, trusted servers, etc in code is not worth the 
effort - keystore files are much better.

I don't know if HttpClient provides some way to add trusted servers easily, does it?
---------------------------------------------------------------------
View the issue:

  http://jira.codehaus.org/secure/ViewIssue.jspa?key=MAVEN-456


Here is an overview of the issue:
---------------------------------------------------------------------
        Key: MAVEN-456
    Summary: unable to access remote repository via https
       Type: Improvement

     Status: Unassigned
   Priority: Major

 Time Spent: Unknown
  Remaining: 0 minutes

    Project: maven
 Components: 
             core
   Versions:
             1.0-beta-10

   Assignee: 
   Reporter: Christoph Gruenwald

    Created: Mon, 2 Jun 2003 5:43 AM
    Updated: Mon, 2 Jun 2003 5:43 AM

Description:
the remote repository is only accessable through http; it is not possible to access it 
via https.

i needed to modify two methods in the class httputils to get this running (see below).

----------------------------------------

public static void getFile( String url,
                            File destinationFile,
                            boolean ignoreErrors,
                            boolean useTimestamp,
                            String proxyHost,
                            String proxyPort,
                            String proxyUserName,
                            String proxyPassword )
    throws Exception
{
    String[] s = parseUrl( url );
    
    // *** MODIFIED - BEGIN ***
    
    // need to create url with separated parameters
    String protocol = s[0];
    String username = s[1];
    String password = s[2];
    String hostname = s[3];
    String hostport = s[4];
    String parsedUrl = s[5];
    
    /*
    String username = s[0];
    String password = s[1];
    String parsedUrl = s[2];
    
    URL source = new URL( parsedUrl );
    */
    
    URL source = new URL(protocol, hostname, Integer.parseInt(hostport), parsedUrl);
    
    // *** MODIFIED - END *** 

    //set the timestamp to the file date.
    long timestamp = 0;
    boolean hasTimestamp = false;
    if ( useTimestamp && destinationFile.exists() )
    {
        timestamp = destinationFile.lastModified();
        hasTimestamp = true;
    }

    //set proxy connection
    useProxyUser( proxyHost, proxyPort, proxyUserName, proxyPassword );

    //set up the URL connection
    URLConnection connection = source.openConnection();
    
    // *** MODIFIED - BEGIN ***
    
    // need to set <code>javax.net.ssl.HostnameVerifier</code> for 
<code>javax.net.ssl.HttpsURLConnection</code>, otherwise connection will be refused
    if (connection instanceof javax.net.ssl.HttpsURLConnection) {
        ( (javax.net.ssl.HttpsURLConnection) connection).setHostnameVerifier(
            new javax.net.ssl.HostnameVerifier() {
                public boolean verify(String hostname, javax.net.ssl.SSLSession 
session) {
                    return true;
                }
            }
        );
    }
    
    // *** MODIFIED - END ***
    
    //modify the headers
    //NB: things like user authentication could go in here too.
    if ( useTimestamp && hasTimestamp )
    {
        connection.setIfModifiedSince( timestamp );
    }
    // prepare Java 1.1 style credentials
    if ( username != null || password != null )
    {
        String up = username + ":" + password;
        String encoding = null;
        // check to see if sun's Base64 encoder is available.
        try
        {
            sun.misc.BASE64Encoder encoder =
                (sun.misc.BASE64Encoder) Class.forName(
                    "sun.misc.BASE64Encoder" ).newInstance();

            encoding = encoder.encode( up.getBytes() );
        }
        catch ( Exception ex )
        {
            // Do nothing, as for MavenSession we will never use
            // auth and we will eventually move over httpclient
            // in the commons.
        }
        connection.setRequestProperty( "Authorization", "Basic " + encoding );
    }
...
}

----------------------------------------

static String[] parseUrl( String url )
{
    // *** MODIFIED - BEGIN ***
    
    // parsed url into more paramters - it must be created with separated parameters
    // this also fixes a bug caused in 
<code>org.apache.maven.verifier.DependencyVerifier#getRemoteArtifact(Artifact)</code> 
when a https-url is used
    
    /*
    String[] parsedUrl = new String[3];
    parsedUrl[0] = null;
    parsedUrl[1] = null;
    parsedUrl[2] = url;

    // We want to be able to deal with Basic Auth where the username
    // and password are part of the URL. An example of the URL string
    // we would like to be able to parse is like the following:
    //
    // http://username:[EMAIL PROTECTED]

    int i = url.indexOf( "@" );
    if ( i > 0 )
    {
        String s = url.substring( 7, i );
        int j = s.indexOf( ":" );
        parsedUrl[0] = s.substring( 0, j );
        parsedUrl[1] = s.substring( j + 1 );
        parsedUrl[2] = "http://"; + url.substring( i + 1 );
    }
    */

    int pos0 = url.indexOf("://"); int step0 = 3;
    if (pos0 == -1) {
        pos0 = url.indexOf(":/"); step0 = 2;
    }
    
    int pos1 = url.indexOf('@');
    int pos2 = url.indexOf(':', pos0 + step0);
    if (pos2 > pos1)
        pos2 = -1;
    
    int pos3 = url.indexOf(':', (pos1 == -1 ? pos0 + step0 : pos1));
    int pos4 = url.indexOf('/', pos0 + step0);
    
    String[] parsedUrl = new String[6];
    
    parsedUrl[0] = url.substring(0, pos0);
    parsedUrl[1] = pos2 == -1 ? null : url.substring(pos0 + step0, pos2);
    parsedUrl[2] = pos2 == -1 ? null : url.substring(pos2 + 1, pos1);
    parsedUrl[3] = url.substring((pos1 == -1 ? pos0 + step0 : pos1 + 1), (pos3 == -1 ? 
(pos4 == -1 ? url.length() : pos4) : pos3));
    parsedUrl[4] = pos3 == -1 ? "-1" : url.substring(pos3 + 1, (pos4 == -1 ? 
url.length() : pos4));
    parsedUrl[5] = pos4 == -1 ? null : url.substring(pos4);

    // *** MODIFIED - END ***

    return parsedUrl;
}

----------------------------------------


---------------------------------------------------------------------
JIRA INFORMATION:
This message is automatically generated by JIRA.

If you think it was sent incorrectly contact one of the administrators:
   http://jira.codehaus.org/secure/Administrators.jspa

If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to