//: "The contents of this file are subject to the Mozilla Public License
//: Version 1.1 (the "License"); you may not use this file except in
//: compliance with the License. You may obtain a copy of the License at
//: http://www.mozilla.org/MPL/
//:
//: Software distributed under the License is distributed on an "AS IS"
//: basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
//: License for the specific language governing rights and limitations
//: under the License.
//:
//: The Original Code is Guanxi (http://www.guanxi.uhi.ac.uk).
//:
//: The Initial Developer of the Original Code is Alistair Young alistair@codebrane.com
//: All Rights Reserved.
//:
package org.guanxi.common.security.ssl;
import javax.net.ssl.X509TrustManager;
import java.security.cert.X509Certificate;
import java.security.cert.CertificateException;
/**
* Instance of this interface manage which X509 certificates may be used to authenticate the remote side
* of a secure socket. Decisions may be based on trusted certificate authorities, certificate revocation
* lists, online status checking or other means
*
* @author Alistair Young alistair@smo.uhi.ac.uk
*/
public class GuanxiX509ProbingTrustManager implements X509TrustManager {
/**
* Given the partial or complete certificate chain provided by the peer, build a certificate path to a
* trusted root and return if it can be validated and is trusted for client SSL authentication based on
* the authentication type. The authentication type is determined by the actual certificate used.
* For instance, if RSAPublicKey is used, the authType should be "RSA". Checking is case-sensitive
*
* @param chain The peer certificate chain
* @param authType The authentication type based on the client certificate
* @throws IllegalArgumentException - if null or zero-length chain is passed in for the chain parameter
* or if null or zero-length string is passed in for the authType parameter
* @throws CertificateException - if the certificate chain is not trusted by this TrustManager
*/
public void checkClientTrusted(X509Certificate[] chain, String authType) throws IllegalArgumentException, CertificateException {
}
/**
* Given the partial or complete certificate chain provided by the peer, build a certificate path to a
* trusted root and return if it can be validated and is trusted for server SSL authentication based on
* the authentication type. The authentication type is the key exchange algorithm portion of the cipher
* suites represented as a String, such as "RSA", "DHE_DSS". Note: for some exportable cipher suites,
* the key exchange algorithm is determined at run time during the handshake. For instance,
* for TLS_RSA_EXPORT_WITH_RC4_40_MD5, the authType should be RSA_EXPORT when an ephemeral RSA key is
* used for the key exchange, and RSA when the key from the server certificate is used. Checking is
* case-sensitive
*
* @param chain The peer certificate chain
* @param authType The key exchange algorithm used
* @throws IllegalArgumentException - if null or zero-length chain is passed in for the chain parameter
* or if null or zero-length string is passed in for the authType parameter
* @throws CertificateException - if the certificate chain is not trusted by this TrustManager
*/
public void checkServerTrusted(X509Certificate[] chain, String authType) throws IllegalArgumentException, CertificateException {
}
/**
* Return an array of certificate authority certificates which are trusted for authenticating peers
*
* @return A non-null (possibly empty) array of acceptable CA issuer certificates
*/
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[]{};
}
}