To introduce the topic, I would start off with these points:
SSL/TLS usage patterns: how it's used to secure other protocols (e.g. HTTP -> HTTPS, SMTP -> SMTPS or SMTP+STARTTLS). I find that the distinction between SSL and TLS is often misunderstood to be a distinction between SSL/TLS from the start v.s. SSL/TLS after a STARTTLS-like command within the application protocol (thanks to a number of popular e-mail clients for promoting this confusion...). I would either start with SSL/TLS within the context of HTTPS and keep this for the very end. It's not the "hard" part of SSL/TLS, but it helps to know how they're used within the rest of the picture (the networking layers). This should put the discussion into context for students with a networking background who wouldn't necessarily know much about cryptography or security.
Some background on public key/asymmetric cryptography, as well as some background on shared key/symmetric cryptography. I'm not sure whether you'd want to go in the mathematical details, but it's good to know what the types of keys are, and what they're used for. (Usually, both are used during an SSL/TLS connection.)
Then, while going through an example of SSL/TLS handshake:
Authentication within SSL/TLS: why do we (tend to) rely on certificates when using SSL/TLS. This will almost inevitably lead you to explain a few points about X.509 certificates, PKIs and CAs. This topic is somewhat orthogonal to SSL/TLS, but the vast majority of SSL/TLS connections rely on it, and that's an essential component for securing the connection. I wouldn't necessarily expand too much on client certificate authentication, but that's at least useful for server certificates. (PKI failures tend to give SSL/TLS a bad name in the news.)
Diffie–Hellman key exchange.
Distinction between cipher suites. This can lead to heavier cryptography discussions. How far you want to go with this will depend on the time and background of your students.
Showing the other types of SSL/TLS records and the purpose of some alerts.
You can also talk about the differences between SSLv3, TLSv1.0, v1.1 and v1.2 a little. Too much on this could lead to very specific discussions, though.
From a practical point of view, you could try a few things:
- Install a tool such as cURL and try to get an HTTPS page of your choice while monitoring the network traffic with Wireshark.
- Make sure the version of cURL you get is as it comes by default, without a preconfigured set of CAs. cURL will complain it can't verify the server certificate without a bundle of trusted CA certificates: this will be a good opportunity to talk about authentication and explain what CAs are for. (Install some CA certs for the rest of the exercise.)
- If you can, install your own test server and give students the private key (or do the demo yourself), to decipher the SSL/TLS encryption with Wireshark, using the server's private key. Make sure you disable Ephemeral Diffie-Hellman cipher suites (DHE/EDH) for this, otherwise it won't work.
- Still using Wireshark, look at the behaviour of other clients. E-mail clients such as Thunderbird can be good for this. A number of SMTP servers (Gmail included now, I believe) are configured for SMTPS and SMTP+STARTTLS (same for IMAP). You can play with both modes and, if you go in Thunderbird's advanced configuration options, you can turn on/off certain versions of SSL/TLS and choose certain cipher suites. It can be interesting to look at how the negotiation differs.
- Experimenting with
openssl s_connect
(perhaps in conjunction with s_server
, but not necessarily) can lead to interesting practical exercises too.