_ 4.2.1 SSL Man kan givetvis skapa system som kombinerar teknikerna från de två tidigare uppgifterna: - Signering/verifiering - Kryptering/dekryptering Schneier (som gjort Blowfish) rekommenderar att man först signerar och sedan krypterar eftersom det är lättare att med lagens stöd hävda att någon signerat ett riktigt dokument. Vi ska nu bekanta oss med två av de standarder som finns för detta: - Secure Socket Layer (SSL) - Secure Multipurpose Internet Mail Extensions (S/MIME) Vi börjar med SSL som är den standard som används vid säkra överföringar över webben av banker, e-affärer med mera. Uppgiften visar hur man använder SSL med lågnivåkopplingar. __ Uppgift Modifiera koden för chattsystemet i uppgifterna: - [2.1.1 Stream sockets på klientsidan, 05_ass/ip1/2.1.1.txt] - [2.1.2 Stream sockets på serversidan, 05_ass/ip1/2.1.2.txt] så att all kommunikation sker med SSL. Man behöver inte använda autentisering på klientsidan. __ Exempel Här måste man först skapa ett självsignerat certifikat, se [Oracle: 8 Java Secure Socket Extension (JSSE) Reference Guide, https://docs.oracle.com/javase/10/security/java-secure-socket-extension-jsse-reference-guide.htm#JSSEC-GUID-3D26386B-BC7A-41BB-AC70-80E6CD147D6F] under "Creating a Keystore to Use with JSSE": = §% keytool -genkeypair -alias duke -keyalg RSA -validity 7 -keystore keystore§ = §keytool -list -v -keystore keystore§ = §keytool -export -alias duke -keystore keystore -rfc -file duke.cer§ = §cat duke.cer§ = §keytool -import -alias dukecert -file duke.cer -keystore truststore§ = §keytool -list -v -keystore truststore§ Ett enkelt exempel kan sen köras enligt följande: = Hämta filen: §[Server.jar, 05_ass/ip1/4/4.2.1/Server.jar]§ = Kör programmet med: §java -Djavax.net.ssl.keyStore=keystore -Djavax.net.ssl.keyStorePassword=1234 Server§ = Hämta filen: §[Client.jar, 05_ass/ip1/4/4.2.1/Client.jar]§ = Kör programmet med: §java -Djavax.net.ssl.trustStore=truststore -Djavax.net.ssl.trustStorePassword=1234 Client§ Notera att texten §keystore§, §truststore§ och §1234§ måste passa med det som man angav under steg 1-6 ovan. Här har vi angett samma lösenord till §keystore§ och §truststore§ (men det är inte nödvändigt). __ Tips På serversidan anger man att klienten inte behöver autentiseras med: § serverSocket.setNeedClientAuth(false); § Lägg till följande §CipherSuite§ §SSL_DH_anon_EXPORT_WITH_DES_CBC_SHA§ till både §SSLServerSocket§ och §SSLSocket§. Se vidare [Oracle: Sample Code Illustrating a Secure Socket Connection Between a Client and a Server, https://docs.oracle.com/javase/10/security/sample-code-illustrating-secure-socket-connection-client-and-server.htm#JSSEC-GUID-A4D59ABB-62AF-4FC0-900E-A795FDC84E41]. __ Hjälp ~ 05_ass/help/01.txt > [Klicka här för hjälp, helper.dsv@gmail.com, Prog Internet: 4.2.1 SSL: http://people.dsv.su.se/~pierre/i/i.cgi?href=05_ass/ip1/4.2.1.txt] ½===system_tutoring_message===½ < ~ 05_ass/help/02.txt