Activitats
Polítiques de seguretat
L’objectiu d’aquesta activitat és ser capaç d’executar correctament un programa donat sota el gestor de seguretat per defecte de Java.
Amb el següent programa, feu el que sigui necessari per poder-lo executar correctament, sense que doni cap error de seguretat, sota el gestor per defecte de Java. Per fer-ho, no es pot modificar el seu codi font.
Abans de fer res, però, analitzeu-ne el codi per saber què fa i assolir executar-lo correctament sense necessitat de cap gestor de seguretat.
import java.io.File;
import java.net.ConnectException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Activitat1 {
public static void main (String[] args) throws Exception {
String home = System.getProperty("user.dir");
if (!"".equals(home)) {
File f = new File (home + File.separator + "names.txt");
if (f.isFile()) {
Scanner rd = new Scanner(f);
while (rd.hasNext()) {
String name = rd.nextLine();
String result = "";
try {
InetAddress ip = InetAddress.getByName(name);
result = ip + "...";
Socket s = new Socket(name,80);
System.out.println(result + "AVAILABLE");
} catch (UnknownHostException ex) {
System.out.println(name + " does not exist!");
} catch (ConnectException ex) {
System.out.println(result + "UNAVAILABLE");
}
}
rd.close();
}
}
}
}
Signatura de codi
L’objectiu d’aquesta activitat és signar digitalment el codi d’una classe i usar aquesta firma per permetre-li permisos exclusius.
Amb el programa de l’apartat anterior, signeu-ne el codi amb un certificat propietat de IOC Developer, que es troba estudiant el cicle de DAM a l’IOC i viu a Girona.
Un cop fet això, adopteu el rol de IOC User, un altre estudiant del mateix cicle, però que viu a Tarragona. Feu el que faci falta per garantir que en el vostre ordinador només el codi dels programes signats per IOC Developer puguin dur a terme les accions restringides que té el codi de l’exercici anterior.
Anàlisi del protocol SSL
L’objectiu d’aquesta activitat és comprovar que el protocol SSL protegeix les dades enviades a través de la xarxa.
Descarregueu-vos i instal·leu l’analitzador de xarxes de programari lliure anomenat Wireshark. Aquest analitzador permet inspeccionar les dades que viatgen per la vostra xarxa local.
Pàgina de descàrrega: http://www.wireshark.org/
Compareu el resultat de connectar-vos a Google mitjançant el seu servidor web no segur (http:///www.google.com) i el seu servidor segur (https:///www.google.com). En el darrer cas, identifiqueu les diferents passes de la negociació SSL.
Adaptació d'un servei existent a SSL
L’objectiu d’aquesta activitat és que partint d’un servei que no treballa amb SSL, veure què cal fer per transformar el seu codi Java de manera que es basi exclusivament en aquest protocol.
Com a punt de partida es disposa del següent codi Java, que implementa un servei en xarxa:
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class TimeServer {
private static final String[] nomDies = {"Diumenge", "Dilluns", "Dimarts",
"Dimecres","Dijous", "Divendres",
"Dissabte"};
public static void main(String[] argv) throws Exception {
try {
ServerSocket srvSocket = new ServerSocket(10000);
while (true) {
Socket cliSocket = srvSocket.accept();
Scanner in = new Scanner (cliSocket.getInputStream());
int[] data = new int[3];
boolean ok = true;
for (int i = 0; i < data.length; i++) {
if (in.hasNextInt()) {
data[i] = in.nextInt();
} else {
ok = false;
}
}
PrintStream out = new PrintStream(cliSocket.getOutputStream());
if (ok) {
data[1] -= 1;
GregorianCalendar cal = new GregorianCalendar(data[2], data[1], data[0]);
int dia = cal.get(Calendar.DAY_OF_WEEK) - 1;
out.println("Aquest dia era " + nomDies[dia] + ".");
} else {
out.println("Format de les dades incorrecte.");
}
cliSocket.close();
}
} catch (Exception ex) {
System.out.println("Error en les comuncacions: " + ex);
}
}
}
Resoleu ordenadament els següents apartats.
1. Esbrineu què fa el servei i genereu un client no segur que s’hi comuniqui correctament. La seva classe es pot anomenar TimeClient.
2. Genereu dues noves classes Java, anomenades SecureTimeServer i Secure TimeClient que adaptin el client i el servei al protocol SSL amb autenticació simple. Tots els fitxers associats a claus i certificats es desen a la carpeta SSL, tant al client com al servei.
Obtenció del certificat del servidor
L’objectiu d’aquesta activitat és processar les dades associades al certificat d’un servidor segur mitjançant el protocol SSL.
Un exemple molt habitual de comprovació sobre les dades del certificat es dóna quan una aplicació client es connecta a un servei. Normalment, cal veure si el nom que conté al camp Common Name del propietari és correspon amb el nom DNS de la màquina. Això es fa per garantir que la clau i el certificat s’està usant realment per la màquina per la qual es van emetre, i no per una altra.
Genereu el codi d’un client que es connecti a un servei mitjançant SSL i validi si el nom de la màquina es correspon al que hi ha al camp de Common Name del seu certificat.
Si suposem que el servei s’executa al port 10000 de la màquina local, i el magatzem de certificats de confiança es troba a la ruta SSL/ClientKeyStore.jks amb contrasenya client:
Autenticació mútua
L’objectiu d’aquesta activitat és crear un servidor i un client segurs mitjançant SSL, de manera que el client també estigui obligat a identificar-se mitjançant un certificat digital (autenticació mútua).
Modifiqueu el codi de les classes SecureTimeClient i SecureTimeClient de manera que ara funcionin mitjançant autenticació mútua. Useu el mateix fitxer tant com a magatzem de claus i com a magatzem pels certificats de confiança, de manera que no faci falta gestionar dos fitxers diferents per cada aplicació.
Control d'usuaris
L’objectiu d’aquesta activitat és establir a través d’un gestor de confiança personalitzat si un client pot accedir o no a un servei segons la identitat continguda al seu certificat digital.
Genereu un servei que disposi d’una llista negra d’usuaris, de manera que encara que disposin d’un certificat generat per un emissor de confiança, se’ls denegui el pas, considerant-los invàlids. Sempre que això passi, el servei ha de mostrar un missatge pel canal d’error estàndard indicant-ho. Per dur a terme això, useu un gestor de confiança personalitzat anomenat BlackListTrustManager.
La llista negra pot ser un fitxer de text amb una llista de noms associats al camp Common Name dels certificats dels clients a qui es vol barrar el pas. Cada nom va a una línia diferent. Ara bé, aquesta llista s’ha de poder actualitzar en tot moment sense haver d’aturar el servei abans.
Gestió de certificats de confiança personalitzada
L’objectiu d’aquesta activitat és gestionar un seguit de certificats de confiança mitjançant un sistema diferent del magatzem de claus, amb l’ajut d’un gestor personalitzat.
Crear una aplicació client que gestioni els certificats de confiança directament mitjançant els fitxers amb extensió CRT exportats amb Keytool. Tots els certificats de confiança es desen a una carpeta. Per afegir o treure un certificat de confiança que el gestor reconegui, l’usuari només ha de copiar o esborrar el fitxer corresponent abans de posar en marxa l’aplicació.
Per fer aquesta tasca, cal generar un gestor de confiança personalitzat anomenat FileCertTrustManager.



