Avancerad SSL-programmering I

Relevanta dokument
Support Manual HoistLocatel Electronic Locks

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

Beijer Electronics AB 2000, MA00336A,

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Avancerad SSL-programmering III

Application Note SW

SSL/TLS-protokollet och

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

InstalationGuide. English. MODEL:150NHighGain/30NMiniUSBAdapter

OOP Objekt-orienterad programmering

2.1 Installation of driver using Internet Installation of driver from disk... 3

Avancerad SSL-programmering II

Installation av F13 Bråvalla

Surfning. Webbklienter och webbservrar. Specialskrivna webbservrar. Kommunikation med sockets

Vässa kraven och förbättra samarbetet med hjälp av Behaviour Driven Development Anna Fallqvist Eriksson

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

GU / Chalmers Campus Lindholmen Tentamen Programutveckling LEU 482 / TIG167

Föreläsning 3: Booleans, if, switch

Webbteknik II. Föreläsning 5. Restless farewell. John Häggerud, 2011

Services + REST och OAuth

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 5

Authentication Context QC Statement. Stefan Santesson, 3xA Security AB

LARS. Ett e-bokningssystem för skoldatorer.

Länkade strukturer. (del 2)

Datasäkerhet och integritet

Innehåll. Pekare Exempel

Michael Q. Jones & Matt B. Pedersen University of Nevada Las Vegas

Innehåll. Pekare Exempel

Certifikattjänsten - testbädd. Anläggningsprojekt för ett nationellt inkomstregister

Tips & Trix - Teknik Jeeves World Copyright 2011 Jeeves Information Systems AB

Retrieve a set of frequently asked questions about digital loans and their answers

Lösenordsportalen Hosted by UNIT4 For instructions in English, see further down in this document

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

PROFINET MELLAN EL6631 OCH EK9300

SSH-protokollet. Niels Möller

1. Unpack content of zip-file to temporary folder and double click Setup

Tentamen Nätverksprogrammering Lösningsförslag

Transport Layer. Transport Layer. F9 Meddelandesändning med UDP EDA095 Nätverksprogrammering. Java och UDP TCP/UDP

HANTERING AV UPS CX

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

Modeller, Objekt och Klasser

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Designmönster, introduktion. Vad är det? Varför skall man använda mönster?

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Calculate check digits according to the modulus-11 method

ARC 32. Tvättställsblandare/Basin Mixer. inr.se

Att skriva till och läsa från terminalfönstret

ÖVERVAKNING AV SQL SERVER

TDIU01 - Programmering i C++, grundkurs

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen Programmering fortsättningskurs DIT950

Webbteknik II. Föreläsning 4. Watching the river flow. John Häggerud, 2011

H0008 Skrivskydd FBWF

Tentamen Nätverksprogrammering Lösningsförslag

electiaprotect GSM SEQURITY SYSTEM Vesta EZ Home Application SMART SECURITY SYSTEMS! SVENSKA ios Android

Föreläsning 8 Datastrukturer (DAT037)

KAP 18 SQL SERVER AGENT

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Programmeringsteknik med C och Matlab

Exam Concurrent and Real-Time Programming

tentaplugg.nu av studenter för studenter

Imperativ programmering. Föreläsning 2

Mål med lektionen! Repetera och befästa kunskaperna.

Recitation 4. 2-D arrays. Exceptions

Manuell installation av SQL Server 2008 R2 Express för SSF Timing

F9 Meddelandesändning med UDP

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

REGISTRERA DIG IDAG Din guide till Ronnebyporten

TDP002 - Imperativ programmering

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Information till användaren att han/hon måste aktivera mjukvaran.

Om inte denna rekommendation efterföljs kan vi tyvärr inte ge några garantier för att vi kan supportera de problem som då kan uppstå.

C++ Slumptalsfunktioner + switch-satsen

Introduk+on +ll programmering i JavaScript

Fö 8 TSEA81. Real-time Linux

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Max Walter Skype Skype Skype Max Walter

Användarbeskrivning för Anvisningstjänsten

Självbalanserande träd AVL-träd. Koffman & Wolfgang kapitel 9, avsnitt 1 2

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

Sätta upp e-post server Ubuntu 14.04, del 1 installation av programvara, konfiguration av mysql och Postfix

F5: Högnivåprogrammering

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

KALIBRERINGS MENY. För att komma tillbaka till Mätfunktionerna håll inne M -knappen 3s. eller vänta 1 min. 1 =MOD. 9.6 KBaud

Java, klasser, objekt (Skansholm: Kapitel 2)

Språket Python - Del 2 Grundkurs i programmering med Python

Tentamensskrivning Nätverksprogrammering (EDA095) , kl 8-13

Om inte denna rekommendation efterföljs kan vi tyvärr inte ge några garantier för att vi kan supportera de problem som då kan uppstå.

BREDBAND MBIT REGISTRERA DIG IDAG. Din guide till Karlshamnsporten

Webbregistrering pa kurs och termin

F5: Högnivåprogrammering

Problem som kan uppkomma vid registrering av ansökan

1 Översikt. 1.1 Koncept 1 (19) Tomas Rook Dokument typ Rev. Manual

Typkonvertering. Java versus C

Styrteknik 7.5 hp distans: E-1000 och E-Designer

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Transkript:

Tekn.dr. Göran Pulkkis Överlärare i Datateknik Avancerad SSL-programmering I 25.1.2012 1 Innehåll SSL-sessioner Förnyad SSL-handskakning Blockerad/oblockerad in/uthantering 25.1.2012 2

SSL-sessioner Session skapas vid en SSL-handskakning såsom parametrar och krypteringnycklar i en SSL_SESSION post Identifieras med session ID context, som kan skapas av en SSL-server med SSL_CTX_set_session_id_context() En session ID context behövs för att en session skall kunna sparas ( session caching ) Grundinställningar för SSL-server: en session sparas i minnet en sessions maximala livslängd är 300 s föråldrade sessioner avlägsnas automatiskt Förbindelse en kommunikationprocess baserad på en session 25.1.2012 3 SSL-sessioner / Server-sidan En sessions maximala livslängd kan ställas in med SSL_CTX_set_timeout() Sättet att spara sessioner kan ställas in med flaggor med SSL_CTX_set_session_cache_mode() SSL_SESS_CACHE_NO_AUTO_CLEAR Föråldrade SSL_SESSION-poster måste avlägsnas manuellt med SSL_CTX_flush_sessions() SSL_SESS_CACHE_NO_INTERNAL_LOOKUP En sparad SSL_SESSION-post hämtas inte från minnet utan från en fil flagg -värden kombineras med bitwise OR 25.1.2012 4

SSL-sessioner / Server-sidan För att spara SSL_SESSION-poster i filer kan 3 självprogrammerade callback -funktioner utnyttjas int new_session_cb(ssl *ctx, SSL_SESSION *session); ställs in för anrop med SSL_CTX_sess_set_new_cb() blir efter inställning automatiskt anropad varje gång en ny SSL_SESSIONpost skapas vid en SSL-handskakning void remove_session_cb(ssl *ctx, SSL_SESSION *session); ställs in för anrop med SSL_CTX_sess_set_remove_cb() blir efter inställning automatiskt anropad vid radering en ogiltig eller föråldrad SSL_SESSION-post SSL_SESSION *get_session_cb(ssl *ctx, unsigned char *id, int len, int ref); ställs in för användning med SSL_CTX_sess_set_get_cb() blir efter inställning automatiskt anropad för att använda en fil då ingen sparad SSL_SESSION-post hittas i minnet 25.1.2012 5 SSL-sessioner / Server-sidan new_session_cb( ) { } acquire a lock for the file named according to the session id open file named according to session id encrypt and write the SSL_SESSION object to the file release the lock 25.1.2012 6

SSL-sessioner / Server-sidan remove_session_cb( ) { } acquire a lock for the file named according to the session id remove the file named according to the session id release the lock 25.1.2012 7 SSL-sessioner / Server-sidan get_session_cb( ) { } acquire a lock for the file named according to the session id in the 2nd arg read and decrypt contents of file and create a new SSL_SESSION object release the lock set the integer referenced by the fourth parameter to 0 return the new session object 25.1.2012 8

SSL-sessioner / Klientsidan En SSL_SESSION-post för en SSL_förbindelse returneras med SSL_get_session() eller SSL_get0_session() eller SSL_get1_session() (referensräknaren uppdateras) En SSL_SESSION-post kan sparas i minnet sparas en fil med makron PEM_write_bio_SSL_SESSION() eller makron PEM_write_SSL_SESSION() hämtas från en fil med makron PEM_read_bio_SSL_SESSION() eller Makron PEM_read_SSL_SESSION() 25.1.2012 9 SSL-sessioner / Klientsidan ssl = SSL_new(ctx)... setup underlying communications layer for ssl...... connect to host:port... if (saved_session for host:port in cache) { SSL_set_session(ssl, saved_session) SSL_SESSION_free(saved_session) } SSL_connect(ssl) call post_connection_check(ssl, host) and check return value... normal application code here... Saved_session = SSL_get1_session(ssl) if (saved_session!= NULL) enter saved_session into cache under host:port SSL_shutdown(ssl) SSL_free(ssl) 25.1.2012 10

Förnyad SSL-handskakning Begäran om SSL-handskakning med SSL_renegotiate(); En flagga hissas för att begäran om SSL-handskakning skall skickas till SSL-kommunikationpartnern i samband med nästa in/ut-operation Partnern kan ignorera denna begäran 25.1.2012 11 OpenSSL version 0.9.6 SSL-server kräver förnyad handskakning /* assume ssl is connected and error free up to here */ set_blocking(ssl); /* this is unnecessary if it is already blocking */ SSL_renegotiate(ssl); SSL_do_handshake(ssl); if (ssl->state!= SSL_ST_OK) int_error("failed to send renegotiation request"); ssl->state = SSL_ST_ACCEPT; SSL_do_handshake(ssl); if (ssl->state!= SSL_ST_OK) int_error("failed to complete renegotiation"); /* our renegotiation is complete */ 25.1.2012 12

OpenSSL version 0.9.6 Starkare autentisering krävs av SSL-klient /* assume ctx is an SSL_CTX object that is setup to not have any verify options. */ int normal_user = 1, admin_user = 2; SSL_CTX_set_session_id_context(ctx, &normal_user, sizeof(int)); /* perform rest of ctx setup, create an ssl object, and connect it */ /* normal SSL I/O operations and application code go here */ /* if we want to upgrade client privilege, we enter the following code block */ SSL_set_verify(ssl, SSL_VERIFY_PEER SSL_VERIFY_FAIL_IF_NO_PEER_CERT, verify_callback); SSL_set_session_id_context(ssl, &admin_user, sizeof(int)); /* renegotiation code fragment from previous example goes here. the new session is made */ post_connection_check(ssl, host); /* if everything is error-free, we have properly authenticated the client */ 25.1.2012 13 Förnyad SSL-handskakning i OpenSSL version 0.9.7 Ny funktion: SSL_renegotiate_pending() Returvärde!= 0 efter begäran om SSL-handskakning så länge handskakning ej skett Returvärde == 0 efter begäran om SSL-handskakning och handskakning har lyckats Ny flagga : SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION, som kan hissas med SSL_CTX_set_options(); Hindrar SSL-klient att återanvända en giltig session efter begäran om SSL-handskakning 25.1.2012 14

IN/UT-hantering för SSL-förbindelse En SSL-förbindelse har två nivåer SSL-nivån (pekare på SSL-post) med kryptering/avkryptering Datakanalnivån ( socket -deskriptor) med dataöverföring i datanät SSL_read eller SSL_write kan avbryts när datakanalnivån är upptagen med Förnyad handskakning 25.1.2012 15 SSL_read och förnyad handskakning code = SSL_read(ssl, buf + offset, size - offset); switch (SSL_get_error(ssl, code)) { case SSL_ERROR_NONE: /* update the offset value */ offset += code; break; case SSL_ERROR_ZERO_RETURN: /* react to the SSL connection being closed */ do_cleanup(ssl); break; case SSL_ERROR_WANT_READ: /* handle this in an application specific way to retry the SSL_read */ break; case SSL_ERROR_WANT_WRITE: /* handle this in an application specific way to retry the SSL_read */ break; default: /* an error occurred. shutdown the connection */ shutdown_connection(ssl); } 25.1.2012 16

Returvärden från anrop av SSL_get_error SSL_ERROR_WANT_READ betyder SSL_read/SSL_write kunde inte fullbordas och underliggande datakanalförbindelse kunde inte fullborda en read -begäran Förnyat anrop av samma SSL_read/SSL_write SSL_ERROR_WANT_WRITE betyder SSL_read/SSL_write kunde inte fullbordas och underliggande datakanalförbindelse kunde inte fullborda en write -begäran Förnyat anrop av samma SSL_read/SSL_write 25.1.2012 17 Returvärden från anrop av SSL_get_error SSL_ERROR_ZERO_RETURN betyder SSL_read/SSL_write misslyckades pga avslutad SSL-session. Den underliggande datakanalförbindelsen kan ännu vara öppen städa upp efter den avslutade SSLförbindelsen med anrop av do_cleanup(ssl) 25.1.2012 18

Blockerad IN/UT-hantering för SSL-förbindelse Blockeringen sker på den underliggande datakanalnivån Vid förnyad SSL-handskakning som kan ske närsomhelst Anrop av SSL_read kan skicka data till kommunikationspartnern Anrop av SSL_write kan hämta data från kommunikationspartnern 25.1.2012 19 Blockerad IN/UT-hantering för SSL-förbindelse Samma anrop av SSL_read/SSL_write bör förnyas om SSL_get_error returnerar SSL_ERROR_WANT_READ eller SSL_ERROR_WANT_WRITE 25.1.2012 20

Oblockerad IN/UT-hantering för SSL-förbindelse Om underliggande datakanalnivå inte kan hantera en begäran att skicka/ta emot data, rapporteras detta omedelbart utan väntetid Invecklad IN/UT-hantering Exempel: void data_tranfer(ssl *A, SSL *B); för dataöverföring mellan SSLförbindelserna A och B 25.1.2012 21 void data_tranfer(ssl *A, SSL *B); Bufferutrymmen A2B för data avläst från A för att skickas till B. A2B_len-värdet (initialiseras till 0) anger antalet byte i A2B B2A för data avläst från B för att skickas till A. B2A_len-värdet (initialiseras till 0) anger antalet byte i B2A 25.1.2012 22

void data_tranfer(ssl *A, SSL *B); Markerings- flaggor have_data_a2b, have_data_b2a (initialiseras till 0) Tillgänglighets- flaggor can_read_a, can_write_b, osv (initialiseras till 0) Blockerings- flaggor T.ex. write_waiton_read_b hissad betyder att den senaste SSL_write för B måste anropas på nytt efter att B är tillgänglig för att hämta data (dessa flaggor initialiseras till 0) 25.1.2012 23