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)); }
0 comentarios