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/

NúmPreguntaVF
1

Permeten mostrar elements gràfics interactius a la pàgina web.

2

En el cas més habitual, s’executen a una “capsa de sorra”.

3

És impossible fer que un applet s’executi fora de la “capsa de sorra”.

4

Per defecte, no poden accedir al sistema de fitxers.

5

Per defecte, no es pot usar l’operació de copiar i enganxar sobre ells.

6

Per defecte, no poden dur a terme cap connexió de xarxa cap a l’exterior.

7

Per defecte, poden consultar el classpath de les propietats del sistema Java.

8

Un applet es pot signar.

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.

NúmPreguntaResposta
1

Esborrar un fitxer .

2

Traduir noms d’equips a adreces IP

3

Modificar la propietat java.home

4

Redirigir l’entrada o la sortida estàndard

5

Aturar un fil d’execució

6

Llegir el portapapers del sistema

7

Accedir a claus privades dins d’un magatzem

8

Afegir un certificat a un magatzem

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";
};
NúmPreguntaVF
1

Qualsevol codi pot acceptar connexions entrants des d’Internet

2

Qualsevol codi pot crear fitxers dins la carpeta /tmp

3

Un codi signat per la Pilar pot resoldre l’adreça www.google.com

4

Un codi signat per la Pilar o la Maria pot crear fitxers a la carpeta base de Java

5

Per poder modificar la propietat java.home, el codi ha d’estar signat per la Pilar i la Maria alhora.

6

Per esborrar el fitxer /docs/dades.txt, el codi ha d’estar signat per algú

7

Un codi signat per la Pilar permet esbrinar el sistema operatiu mitjançant les propietats del sistema

8

Un codi signat per en Joan o la Maria pot executar programes a la carpeta base (HOME) de l’usuari

9

Un codi signat per en Joan es pot descarregar la documentació de Java des del seu servidor a Internet

10

Un codi signat per en Joan mai podrà executar de cap manera programes ubicats a la carpeta base (HOME) de l’usuari, ja que no pot llegir la propietat user.home

Exercici 4

A partir d’un procés d’autenticació simple mitjançant SSL en Java, quines afirmacions són certes i quines falses?

NúmPreguntaVF
1

El client autentica al servei

2

El servei autentica al client

3

El client necessita un magatzem de certificats de confiança

4

El servei necessita un magatzem de certificats de confiança

5

El client necessita un magatzem de claus

6

El servei necessita un magatzem de claus

7

Quan cal un magatzem de claus i un de certificats de confiança, han de tenir la mateixa contrasenya

8

El magatzem de confiança i el de claus han d’estar en fitxers separats pel client

Exercici 5

Relacioneu les següents descripcions breus amb la seva classe corresponent:

NúmPreguntaResposta
1

Canal de dades segur

2

Canal de connexions entrants segur

3

Generador de connexions segures

4

Propietats del motor de connexions SSL

5

Propietats d’una connexió SSL establerta

6

Superclasse per un gestor de certificats de confiança personalitzat .

7

Superclasse per un gestor de claus personalitzat

8

Error en l’autenticació SSL

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.

NúmPregunta
1

El servei web no té cap certificat correctament configurat

2

El certificat de l’emissor no es troba al magatzem de certificats de confiança del client (en aquest cas, el navegador web)

3

El nom del propietari del certificat no concorda amb el nom usat per connectar-se

4

El client no suporta cap algorisme criptogràfic dels que necessita el servei

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();
  }
}
NúmPreguntaVF
1

Si s’executa en un servei, no accepta mai cap certificat com a vàlid

2

Els certificats de confiança es carreguen des del magatzem certs/issuers.jks

3

Sempre carrega tots els certificats que hi ha desats al fitxer amb el magatzem de confiança

4

Per decidir si el certificat de l’altre extrem és vàlid, se’n comprova la data d’expiració

5

Per decidir si el certificat de l’altre extrem és vàlid, se’n comprova el nom de l’emissor

6

Per decidir si el certificat de l’altre extrem és vàlid, se’n comprova la firma digital

7

Per decidir si el certificat de l’altre extrem és vàlid, se’n comprova el camp O dins del nom distingit del seu propietari

8

Només accepta certificats d’emissors que, quan es va posar en marxa l’aplicació, els faltaven almenys 30 dies abans d’expirar

9

Només accepta com a certificats de confiança aquells que, dins del nom distingit de l’emissor, al camp O hi hagi el valor IOC

Anar a la pàgina anterior:
Activitats
Anar a la pàgina següent:
Índex general