Seleccionar página

Si se tiene un Apache + JBoss con validación de certificados de cliente en el Apache y se tiene que pasar el certificado a JBoss hay que poner la siguiente linea para pasar el certificado y que sea accesible en JBOSS:

SSLOptions +ExportCertData +StdEnvVars

Y sacarlo asi:

X509Certificate[] certs = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");

Esto vale si se usa mod_proxy_ajp, pero no si se usa mod_proxy_http.

Para hacer lo mismo con mod_proxy_http hay que crear una variable en la cabecera:

RequestHeader set X-ClientCert %{SSL_CLIENT_CERT}s

Y luego usar esa variable desde java en un filtro o servlet al que se acceda:

public static X509Certificate parseCertificate(HttpServletRequest _request) throws CertificateException{

    String certStr = _request.getHeader("x-clientcert");

    ServletRequest req = (ServletRequest)_request;
    String certStr = req.getParameter(arg0);
    // Antes hay quitar la cabecera y el pie
    byte [] decoded = Base64.decode(certStr.replaceAll("-----BEGIN CERTIFICATE-----", "").replaceAll("-----END CERTIFICATE-----", ""));

    return (X509Certificate)CertificateFactory.getInstance("X.509").generateCertificate(new ByteArrayInputStream(decoded));
}
Share