Ejemplo: desarrollo de un gestor de confianza personalizada para decisiones de confianza SSL personalizadas
El ejemplo siguiente es un gestor de confianza personalizado de ejemplo. El gestor de confianza personalizado no efectúa ninguna decisión sino que utiliza la información del certificado X.509 al que hace referencia para tomar las decisiones.
Después de crear y empaquetar el gestor de confianza personalizado, configúrelo desde el archivo ssl.client.props para un cliente puro o el enlace
SSLConfiguration TrustManager en la consola administrativa.
Consulte Control del gestor de confianza de las decisiones de confianza sobre certificados X.509 para obtener más información acerca de los gestores de confianza.
Nota: Este ejemplo sólo se debe utilizar como un ejemplo y no está soportado.
import java.security.cert.X509Certificate;
import javax.net.ssl.*;
import com.ibm.wsspi.ssl.TrustManagerExtendedInfo;
public final class CustomTrustManager implements X509TrustManager,
TrustManagerExtendedInfo
{
private static ThreadLocal threadLocStorage = new ThreadLocal();
private java.util.Properties sslConfig = null;
private java.util.Properties props = null;
public CustomTrustManager()
{
}
/**
* La ejecución de WebSphere Application Server llama a este método para establecer la
* información de host de destino y otra información de conexión en el futuro.
* Se ha de establecer en ThreadLocal ya que varias conexiones pueden utilizar
* el mismo gestor de confianza.
*
* @param java.util.Map - Contiene información acerca de la conexión.
*/
public void setExtendedInfo(java.util.Map info)
{
threadLocStorage.set(info);
}
/**
* Método al que se llama internamente para recuperar información acerca de la conexión.
*
* @return java.util.Map - Contiene información acerca de la conexión.
*/
private java.util.Map getExtendedInfo()
{
return (java.util.Map) threadLocStorage.get();
}
/**
* La ejecución de WebSphere Application Server llama a este método para establecer las
* las propiedades personalizadas.
*
* @param java.util.Properties - custom props
*/
public void setCustomProperties(java.util.Properties customProps)
{
props = customProps;
}
/**
* Se llama internamente a este método para las propiedades personalizadas
* establecidas en la configuración del gestor de confianza.
*
* @return java.util.Properties - información establecida en la configuración.
*/
private java.util.Properties getCustomProperties()
{
return props;
}
/**
* La ejecución de WebSphere Application Server llama a este método para establecer
* establecer las propiedades de configuración SSL establecidas para esta conexión.
*
* @param java.util.Properties - contiene una propiedad para la configuración SSL.
*/
public void setSSLConfig(java.util.Properties config)
{
sslConfig = config;
}
/**
* TrustManager llama a este método para acceder a la configuración SSL para
* esta conexión.
*
* @return java.util.Properties
*/
public java.util.Properties getSSLConfig ()
{
return sslConfig;
}
/**
* Se llama a este método para establecer la confianza con un cliente desde el servidor.
* Consulte la documentación de la API para javax.net.ssl.X509TrustManager.
*/
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws java.security.cert.CertificateException
{
for (int j=0; j<chain.length; j++)
{
System.out.println("Información de certificados de cliente:");
System.out.println(" Subject DN: " + chain[j].getSubjectDN());
System.out.println(" Issuer DN: " + chain[j].getIssuerDN());
System.out.println(" Serial number: " + chain[j].getSerialNumber());
System.out.println("");
}
}
/**
* Se llama a este método para establecer la confianza con un servidor desde el cliente.
* Consulte la documentación de la API para javax.net.ssl.X509TrustManager.
*/
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws java.security.cert.CertificateException
{
for (int j=0; j<chain.length; j++)
{
System.out.println("Información de certificados de servidor:");
System.out.println(" Subject DN: " + chain[j].getSubjectDN());
System.out.println(" Issuer DN: " + chain[j].getIssuerDN());
System.out.println(" Serial number: " + chain[j].getSerialNumber());
System.out.println("");
}
}
/**
* Devolver una matriz de certificados de autorización de certificados de confianza
* para los iguales que se autentican. Puede devolver null ya que IbmX509
* o IbmPKIX proporcionarán un conjunto de emisores por omisión.
*
* Consulte la documentación de la API para javax.net.ssl.X509TrustManager.
*/
public X509Certificate[] getAcceptedIssuers()
{
return null;
}
}