001: /*
002: * ====================================================================
003: * Copyright (c) 2004-2008 TMate Software Ltd. All rights reserved.
004: *
005: * This software is licensed as described in the file COPYING, which
006: * you should have received as part of this distribution. The terms
007: * are also available at http://svnkit.com/license.html
008: * If newer versions of this license are posted there, you may use a
009: * newer version instead, at your option.
010: * ====================================================================
011: */
012: package org.tmatesoft.svn.core.auth;
013:
014: import java.io.IOException;
015:
016: import javax.net.ssl.SSLContext;
017:
018: import org.tmatesoft.svn.core.SVNErrorMessage;
019: import org.tmatesoft.svn.core.SVNException;
020:
021: /**
022: * The <b>ISVNSSLManager</b> interface is intended for
023: * creating secure SSL contexts over sockets used for data i/o.
024: *
025: * <p>
026: * When accessing a repository over http:// there's a risk that
027: * passwords (in the case of a BASIC authentication they are transmitted
028: * as a plain text) may be sniffed by a malefactor. SSL manager provides
029: * a secure connection encrypting all data i/o over a socket.
030: *
031: * <p>
032: * To get an SSL manager to access a particular repository use the
033: * {@link ISVNAuthenticationManager#getSSLManager(SVNURL) getSSLManager()}
034: * method of an authentication manager.
035: *
036: * <p>
037: * A default implementation of <b>ISVNSSLManager</b> (that comes along
038: * with a default implementation of <b>ISVNAuthenticationManager</b> - <b>org.tmatesoft.svn.core.internal.wc.DefaultSVNAuthenticationManager</b>)
039: * uses ssl options from the standard <i>servers</i> file (it can be found in the
040: * Subversion runtime configuration area - read more {@link org.tmatesoft.svn.core.wc.ISVNOptions here}).
041: * That is to accept a server certificate, it first looks for the "trusted" CA sertificate in the in-memory
042: * runtime auth storage (see {@link ISVNAuthenticationStorage}). If the one is not found, it then tries to
043: * find it in the disk auth storage in the runtime config area. Also if the
044: * <span class="javastring">"ssl-trust-default-ca"</span> is set to <span class="javastring">"yes"</span>, then
045: * SVNKit will trust those CAs found in the JDK "JKS" KeyStore. User certificates are also got from the
046: * options in the <i>servers</i> file.
047: *
048: * <p>
049: * An SSL manager is invoked when a user tries to access a repository via the https:// protocol.
050: *
051: * @version 1.1.1
052: * @author TMate Software Ltd.
053: * @see ISVNAuthenticationManager
054: */
055: public interface ISVNSSLManager {
056:
057: /**
058: * Returns an SSL context for the appropriate authentiation realm.
059: *
060: * @return an ssl context
061: * @throws IOException if an i/o error occurred
062: */
063: public SSLContext getSSLContext() throws IOException, SVNException;
064:
065: /**
066: * @return true if user should be prompted for client certificate
067: */
068: public boolean isClientCertPromptRequired();
069:
070: /**
071: * Sets client authentication that will be used in SSLContext.
072: *
073: * @param sslAuthentication a client authentication
074: */
075: public void setClientAuthentication(
076: SVNSSLAuthentication sslAuthentication);
077:
078: /**
079: * Returns client authentication.
080: *
081: * @return client authentication
082: */
083: public SVNSSLAuthentication getClientAuthentication();
084:
085: /**
086: * @return error occured during loading of client certificate or null.
087: */
088: public Throwable getClientCertLoadingError();
089:
090: /**
091: * Accepts this SSL context if authentication has succeeded or
092: * not if authentication failed.
093: *
094: * @param accepted <span class="javakeyword">true</span> if
095: * authentication succeeded, otherwise
096: * <span class="javakeyword">false</span>
097: * @param errorMessage the reason of the authentication failure
098: */
099: public void acknowledgeSSLContext(boolean accepted,
100: SVNErrorMessage errorMessage);
101: }
|