Hola gente!
La duda es la siguiente, estoy tratando de adaptar el siguiente código, el cual se encarga de obtener la dirección ip de quien se conecta (las conexiones son mediante certificados x509), luego obtiene los datos del certificado y en función de la validez de los mismos, concede o deniega el acceso.
Lo que pretendo con la modificación es hacer una función con dicho código, a la cual le pasamos una dirección ip, si esta coincide con alguna de las ip´s que se conectan, obtiene el nombre o id de usuario del certificado y lo retorna.
El código es el siguiente:
<head>
<title>Verificación de certificado</title>
</head>
<body>
<center>
<%@ page language='java' contentType='text/html'
import='java.io.IOException'
import='java.io.Writer'
import='java.util.*'
import='java.util.regex.*'
import='java.io.*'
import='java.security.cert.X509Certificate'
import='java.security.cert.CertificateExpiredExcep tion'
import='java.security.cert.CertificateNotYetValidE xception'
import='java.util.Hashtable'
import='oasis.names.tc.dss._1_0.core.wsdl.SOAPport '
import='oasis.names.tc.dss._1_0.core.wsdl.digitalS ignatureServiceClient'
import='org.apache.xmlbeans.XmlBase64Binary'
import='org.apache.xmlbeans.XmlOptions'
import='org.w3.x2000.x09.xmldsig.X509DataDocument'
import='org.w3.x2000.x09.xmldsig.X509DataType'
import='x0CoreSchema.oasisNamesTcDss1.OptionalInpu tsDocument.OptionalInputs'
import='x0CoreSchema.oasisNamesTcDss1.SignatureObj ectType'
import='x0CoreSchema.oasisNamesTcDss1.SignatureObj ectType.Other'
import='x0CoreSchema.oasisNamesTcDss1.VerifyReques tDocument'
import='x0CoreSchema.oasisNamesTcDss1.VerifyReques tDocument.VerifyRequest'
import='x0CoreSchema.oasisNamesTcDss1.VerifyRespon seDocument'
import='x0ProfilesXSS.oasisNamesTcDss1.ReturnX509C ertificateInfoDocument'
%>
<%
/* COGER LA IP DE QUIEN SE CONECTE */
String ip = request.getRemoteAddr();
//PARA LA IP DADA CONTRA "dip" pasada por parámetro
// if(ip == dip){
/* COGER CERTIFICADOS DEL NAVEGADOR estandar x509 */
X509Certificate[] certs = (X509Certificate[])request.getAttribute("javax.servlet.request.X509C ertificate");
if (certs != null) {
/* PREPARAR CONEXION SOAP */
digitalSignatureServiceClient proxy = new digitalSignatureServiceClient();
SOAPport soap = proxy.getdssPortSoap("http://psisbeta.catcert.net/psis/catcert/dss");
Hashtable prefixes = new Hashtable();
prefixes.put("urn:oasis:names:tc:dss:1.0:core:sche ma", "dss");
prefixes.put("http://www.w3.org/2000/09/xmldsig#", "ds");
XmlOptions options = new XmlOptions();
options.setSaveSuggestedPrefixes(prefixes);
options.setSavePrettyPrint();
VerifyRequestDocument requestDocument = VerifyRequestDocument.Factory.newInstance(options) ;
VerifyRequest verifyRequest = requestDocument.addNewVerifyRequest();
verifyRequest.setProfile("urn:oasis:names:tc:dss:1 .0:profiles:XSS");
SignatureObjectType signature = verifyRequest.addNewSignatureObject();
/* PARA CADA CERTIFICADO ... */
for (int i=0; i<certs.length; i++) {
byte[] certEncoded = certs[i].getEncoded();
X509DataDocument x509doc = X509DataDocument.Factory.newInstance();
X509DataType x509data = x509doc.addNewX509Data();
XmlBase64Binary b64certificate = x509data.addNewX509Certificate();
b64certificate.setByteArrayValue(certEncoded);
Other any = signature.addNewOther();
any.set(x509doc);
/* CONEXION SOAP */
VerifyResponseDocument responseDocument;
responseDocument = soap.verify(requestDocument);
String valid = responseDocument.getVerifyResponse().getResult().g etResultMinor().split(":")[9];
String definitive = responseDocument.getVerifyResponse().getResult().g etResultMinor().split(":")[11];
String success = responseDocument.getVerifyResponse().getResult().g etResultMajor().split(":")[7];
String subject = certs[i].getSubjectDN().toString();
/* LDAP AND SHELL SECURITY */
Pattern p_subject = Pattern.compile(".*[*|'(;)$`!].*");
String nombre = subject.split(" ")[0].split("=")[1];
subject = subject.split("=")[1];
subject = subject.replace(" ","_");
if (!p_subject.matcher(subject).matches() && valid.equals("valid") && definitive.equals("Definitive") && success.equals("Success")) {
/* CERTIFICADO VALIDO */
//%>
//<h1> Acceso concedido. </h1>
//Bienvenido/a <%=nombre%>
//<%
//Return con id de usuario
//.......
}
}
// }
}
%>
</center>
</body>
</html>
Alguna idea de como hacer la adaptación?
Gracias a todos!!