Exercicis d'autoavaluació
Exercici 1
Un dels tipus d’aplicació en el qual el concepte de “capsa de sorra” és molt rellevant són els applets, programes escrits en Java que s’incrusten a una pàgina HTML i s’executen al navegador web.
A partir de la seva descripció, que trobareu a la pàgina oficial, indiqueu si les següents afirmacions són vertaderes (V) o falses (F).
Pàgina oficial: http://docs.oracle.com/javase/tutorial/deployment/applet/
Exercici 2
Relacioneu les següents descripcions amb el seu tipus d’acció corresponent, que pertany a alguna de les classes associades al tipus de permisos. Per contestar aquest exercici, us caldrà consultar la documentació de les classes associades als tipus de permís, mitjançant l’API de Java.
Exercici 3
Suposem el següent fitxer de polítiques de seguretat. Indiqueu si les següents afirmacions són vertaderes (V) o falses (F).
grant signedBy "pilar,maria" { permission java.util.PropertyPermission "java.home", "read"; permission java.io.FilePermission "${java.home}/-", "read"; }; grant { permission java.io.FilePermission "/*", "read,write"; permission java.io.FilePermission "/docs/dades.txt", "read,write,delete"; }; grant signedBy "pilar" { permission java.util.PropertyPermission "user.name", "read, write"; permission java.net.SocketPermission "www.google.com", "connect"; }; grant signedBy "joan" { permission java.net.SocketPermission "docs.oracle.com", "resolve"; permission java.io.FilePermission "${user.home}/-", "read, write, delete, execute"; };
Exercici 4
A partir d’un procés d’autenticació simple mitjançant SSL en Java, quines afirmacions són certes i quines falses?
Exercici 5
Relacioneu les següents descripcions breus amb la seva classe corresponent:
Exercici 6
El tipus de servei més comú en el qual s’utilitza SSL per garantir la seguretat de l’intercanvi de dades és el de pàgines web. Per identificar un lloc web que l’utilitza, n’hi ha prou amb veure si per connectar-se cal usar la capçalera HTTP (protocol no segur) o HTTPS (protocol segur).
Mireu què succeeix si us connecteu al lloc web https://www.goolge.com. Esbrineu quin és el motiu més probable pel missatge d’alerta que us apareix.
Exercici 7
A partir del següent codi d’una classe que intenta codificar un gestor de confiança personalitzat anomenat IOCTrustManager
, indiqueu a grans trets si les afirmacions que vénen a continuació són vertaderes (V) o falses (F).
public class IOCTrustManager implements X509TrustManager { private ArrayList<X509Certificate> issuers = new ArrayList<>(); public IOCTrustManager() throws Exception { System.setProperty("javax.net.ssl.trustStore", "certs/issuers.jks"); System.setProperty("javax.net.ssl.trustStorePassword", "issuers"); KeyStore keyStore = KeyStore.getInstance("JKS"); keyStore.load(new FileInputStream("trusted.jks"), "trust".toCharArray()); Enumeration<String> aliases = keyStore.aliases(); while(aliases.hasMoreElements()) { String a = aliases.nextElement(); if (keyStore.isCertificateEntry(a)) { X509Certificate c = (X509Certificate)keyStore.getCertificate(a); String dn = c.getSubjectDN().getName(); if (dn.contains("O=IOC")) { issuers.add((X509Certificate)keyStore.getCertificate(a)); } } } } @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { if (chain.length == 0) { throw new CertificateException(); } boolean invalid = true; String clientIssuer = chain[0].getIssuerDN().getName().trim(); //Executar validity X509Certificate[] certs = getAcceptedIssuers(); for (X509Certificate c: certs) { String issuerSubject = c.getSubjectDN().getName().trim(); if (clientIssuer.equalsIgnoreCase(issuerSubject)) { try { PublicKey pub = c.getPublicKey(); chain[0].verify(pub); invalid = false; } catch (Exception e) { } } } if (invalid) { throw new CertificateException(); } } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { throw new CertificateException(); } @Override public X509Certificate[] getAcceptedIssuers() { return dateSieve(); } public X509Certificate[] dateSieve() { //Entre tots els certs, triar els que la seva d'emissió sigui inferior a un mes ArrayList<X509Certificate> list = new ArrayList<>(); for (X509Certificate c: issuers) { Calendar now = Calendar.getInstance(); now.add(Calendar.DAY_OF_MONTH, 30); Date limit = now.getTime(); Date expiry = c.getNotAfter(); if (expiry.after(limit)) { list.add(c); } } return (X509Certificate[])list.toArray(); } }