Foros del Web » Programación para mayores de 30 ;) » Java »

Certificado X509 y dirección ip

Estas en el tema de Certificado X509 y dirección ip en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 06/07/2011, 08:33
 
Fecha de Ingreso: julio-2008
Mensajes: 7
Antigüedad: 15 años, 9 meses
Puntos: 0
Busqueda Certificado X509 y dirección ip

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&oacute;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!!

Etiquetas: ip, certificados
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:23.