_ 4.1.2 Säkra program med med avsändarrestriktioner för äpplen I den här uppgiften så bygger vi vidare på uppgiften [4.1.1 Säkra program med funktionella restriktioner, 05_ass/ip1/4.1.1.txt] och vi ska nu avgöra om ett program verkligen kommer från både (1) rätt ställe och (2) rätt avsändare. Detta kan vi göra eftersom vi kommer att kräva att programmet är signerat av en viss specifik avsändare. Vi kommer då även in på hur man skapar och lagrar nycklar och certifikat med de verktyg för säkerhet som ingår i JDK: §keytool§, §jarsigner§ och §policytool§. __ Uppgift Arbeta i två kataloger, en tänkt att vara för den som äger koden, den andra tänkt för den som mottager koden: - I §ägarkatalogen§: Skapa nycklar (en publik och en privat) med hjälp av §keytool§-verktyget och använd den privata nyckeln för att signera jar-filen från uppgiften [4.1.1 Säkra program med funktionella restriktioner, 05_ass/ip1/4.1.1.txt] med §jarsigner§-verktyget. Skapa sedan ett certifikat för den publika nyckeln. Kopiera certifikatet till §mottagarkatalogen§. - I §mottagarkatalogen§: Importera certifikatet (innehållande den publika nyckeln) med §keytool§-verktyget i mottagarens (eventuellt ej ännu skapade) §keystore§. Gör en polcyfil som specifierar (1) §keystore§ och (2) vem som har signerat filen. Kör den signerade jar-filen från §ägarkatalogen§ med denna nya policyfil och §keystore§ och kontrollera att det signerade äpplet verifieras och nu får koppla sig fritt. Lägg §ägarkatalogen§ på Internet och anropa programmet lokalt från §mottagarkatalogen§. Redovisa policyfilen, certifikatet samt på en vanlig textfil §README.txt§ samtliga steg och kommandon som utförts. __ Exempel Ett exempel kan köras enligt ett av följande sätt: - Starta äpplet lokalt via den egna datorn: -- Hämta filen: §[keystore, 05_ass/ip1/4/4.1.2/receiver/local/keystore]§ -- Hämta filen: §[policy_1.txt, 05_ass/ip1/4/4.1.2/receiver/local/policy_1.txt]§ -- Hämta filen: §[SignedBrowserCool.jar, 05_ass/ip1/4/4.1.2/sender/SignedBrowserCool.jar]§ -- Hämta filen: §[signed_browser_cool.html, 05_ass/ip1/4/4.1.2/sender/signed_browser_cool.html]§ -- Kör med: §appletviewer -J-Djava.security.policy=policy_1.txt signed_browser_cool.html§ - Starta äpplet via Internet: -- Hämta filen: §[keystore, 05_ass/ip1/4/4.1.2/receiver/from_net_1/keystore]§ -- Hämta filen: §[policy_2.txt, 05_ass/ip1/4/4.1.2/receiver/from_net_1/policy_2.txt]§ -- Kör med: §appletviewer -J-Djava.security.policy=policy_2.txt http://atlas.dsv.su.se/~pierre/courses/05_ass/ip1/4/4.1.2/sender/signed_browser_cool.html§ - Starta äpplet via Internet och hämta även policy- och keystore-filerna via Internet: -- Kör med: §appletviewer -J-Djava.security.policy=http://atlas.dsv.su.se/~pierre/courses/05_ass/ip1/4/4.1.2/sender/policy_3.txt http://atlas.dsv.su.se/~pierre/courses/05_ass/ip1/4/4.1.2/sender/signed_browser_cool.html§ Notera att policyfilerna är olika beroende på om man startar äpplet lokalt eller via Internet. Det sista sättet att starta äpplet är inte realistiskt eftersom policyfilen (här [policy_3.txt, 05_ass/ip1/4/4.1.2/sender/policy_3.txt]) inte är ens egen och man då totalt förlorar all kontroll på vad äpplet får göra (det kan ju stå vad som helst i policyfilen). __ Tips Kopiera policyfilen från uppgiften [4.1.1 Säkra program med funktionella restriktioner, 05_ass/ip1/4.1.1.txt] och utgå från den. Keystore i policyfilen ska vara en URL till aktuellt keystore. Om man behöver testa så kan man verifiera en signerad fil med kommandot: § jarsigner -verify -verbose -keystore § Vill man även (frivilligt) titta på hur man gör i en vanlig webbläsare med äpplen som ska kunna göra saker utanför den säkra sandlådan så gör man på ett liknande sätt, se exempelvis följande [exempel, 05_ass/ip1/4/4.1.2/sender/signed_browser_cool_converted.html]. Som man ser i exemplet så litar inte webbläsarem på certifikatet eftersom det är självsignerat. Vill man använda denna teknik på riktigt så är det givetvis viktigt med tillförlitlighet och man ska då man använda ett certifikat som man kan köpa från någon av de CA som webbläsaren litar på default, exempelvis [VeriSign: VeriSign Services for Developers, http://www.verisign.com/developer/index.html] eller [Thawte: Code Signing Certificates, http://www.thawte.com/codesign/] (som dock kostar pengar). __ Hjälp ~ 05_ass/help/01.txt > [Klicka här för hjälp, helper.dsv@gmail.com, IP Stationär: 4.1.2 Säkra program med med avsändarrestriktioner för äpplen: http://people.dsv.su.se/~pierre/courses/i.cgi?href=05_ass/ip1/4.1.2.txt] < ~ 05_ass/help/02.txt