Ssl in a nutshell

26
SSL in a Nutshell Just enough to be dangerous . . . . .

description

A gentle guide to SSL, how it works, how it works with Java and how to debug SSL connections

Transcript of Ssl in a nutshell

Page 1: Ssl in a nutshell

SSL in a NutshellJust enough to be dangerous . . . . .

Page 2: Ssl in a nutshell

In the kingdom of the blind, the one eyed man is king

(In other words I am not an expert – I just play one on TV!)

This is all relatively introductory information

Expectation setting

Page 3: Ssl in a nutshell

What is SSL? Certificates How does SSL work? How we use SSL? SSL & Java Configuration Debugging Resources

Agenda

Page 4: Ssl in a nutshell

SSL = Secure Socket Layer TLS = Transport Layer Security is the new name A cryptographic protocol to provide secure

communication over networks (such as Internet) Protocol provides two of the three key aspects for

Security Confidentiality (Encryption) Authentication (you are who you say you are) Authorization (What you can do – controlled by your app –

not the protocol)

What is SSL?

Page 5: Ssl in a nutshell

What is a Certificate? A signed digital certificate is an industry-

standard means of verifying the authenticity of an entity, such as a server, client, or application. To ensure maximum security, a certificate is issued by a third-party certificate authority (CA) e.g. Verisign

But first this . . . .

Page 6: Ssl in a nutshell

Creation date: Jul 28, 2010Entry type: PrivateKeyEntryCertificate chain length: 1Certificate[1]:Owner: CN=some.url, OU=Services, O=Nokia, L=Burlington, ST=Massachusetts, C=USIssuer: OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign,

OU=VeriSign International Server CA - Class 3, OU="VeriSign, Inc.", O=VeriSign Trust Network

Serial number: 7c391cdfaf10822ce338c3eb925f77bcValid from: Mon Apr 12 00:00:00 UTC 2010 until: Tue Apr 12 23:59:59 UTC 2011Certificate fingerprints: MD5: 06:5C:45:66:C5:28:77:48:E6:58:D9:FB:C5:06:41:1C SHA1: 74:4B:A8:3D:A7:BF:57:30:4E:23:B5:21:4C:2E:9B:8B:27:5F:9E:A5 Signature algorithm name: SHA1withRSA Version: 3

And more stuff . . . .

What does a cert look like? Ours.

Page 7: Ssl in a nutshell

One-Way SSL

How does SSL work?

NOTE: If a Cert is signed by a CA – it does NOT need to be in Keystore A

Page 8: Ssl in a nutshell

In Detail . . . . Client and Server negotiate an SSL connection with a

“handshake” Client presents a list of supported supported ciphers &

hash functions Server picks the strongest and tells client Server sends back a certificate (containing name of a

Certificate Authority e.g. Verisign) and the server’s public encryption key

Client confirms cert with CA. Client autheniticates Server. Cont.

How does SSL work?

Page 9: Ssl in a nutshell

Client picks a random number, encrypts that (with server’s public key) and sends it to server.

Only server can decrypt it (using it’s private key) Now they both have a shared secret (the random

number) From the random number, both parties generate key

material for encryption and decryption. This concludes the handshake Secured connection, which is encrypted and decrypted

with the key material until the connection closes

How does SSL work? (cont.)

Page 10: Ssl in a nutshell

In the One-way example the client just verified the server is who they say they are?

Example: Login to your bank? But how does your bank know YOU are who you

say you are? Typically a login/password 2 Way SSL achieves the same “Mutual

Authentication” by having both sides use Certs

2-Way SSL

Page 11: Ssl in a nutshell

2-Way SSL

Page 12: Ssl in a nutshell

It is a Widespread Standard and is rock solid – no major hacking stories / events.

But nothing is impervious

Why SSL?

Page 13: Ssl in a nutshell

We use SSL to talk with aggregators Outbound: TO the aggregator Inbound: FROM the aggregator (the callback)

We also use SSL in communication with folks upstream but dedicated fiber With Dev certs (we trust them right!) And we add Digital Signing . . . . Just in case?

How do we use SSL?

Page 14: Ssl in a nutshell

JSSE = Java Secure Socket Extension is the default Java package Was optional package before JDK 1.4. Now it’s bundled in the JDK. Either way it’s not easy to use We use Apache HTTP Client - it’s still REALLY hard (not!)

HttpClient httpclient = new HttpClient(); GetMethod httpget = new GetMethod("https://www.verisign.com/"); try { httpclient.executeMethod(httpget); System.out.println(httpget.getStatusLine()); } finally { httpget.releaseConnection(); }

SSL using Java

Page 15: Ssl in a nutshell

The hard part is acquiring and managing the keys and certs

Procuring a cert is described elsewhere Keystore

Contains our private key and private certificate Created from scratch

Truststore Used to contain Self-Signed Certs from Aggregators Copied from Java’s own cacerts (to handle the case where

certs are signed by the CA)

The hard part . . . . .

Page 16: Ssl in a nutshell

Keytool ships with Java Show Keys & Certs in Keystorekeytool -list -v -keystore keystore -storepass changeit

Show Certs in the Truststorekeytool -list -v -keystore cacerts -storepass changeit

Keystore / truststore: how to . . .

Page 17: Ssl in a nutshell

SSL does not have to be handled (“offloaded”) by Jboss/Tomcat

It can be offloaded by Apache Web Server It can be offloaded by Load Balancer

Architecture

Page 18: Ssl in a nutshell

IMPORTANT NOTE: Not addressed here – this is up to your application

Authorization

Page 19: Ssl in a nutshell

Typical Exceptions if . . . Can’t find keystore / truststore Our private key is missing from keystore Whitelisting error (not really SSL)

Debugging: What to look for

Page 20: Ssl in a nutshell

-Djavax.net.debug=all

Debugging Tools #1

Page 21: Ssl in a nutshell

Use “wget” to unit test your key/certs (one-way!) e.g. to test

wget -d -v --certificate=/somecrt --post-data ‘SOAP STUFF GOES HERE'--private-key=/somekeyhttps://someurl.com

Debugging tools #2: wget

Page 22: Ssl in a nutshell

Resolving somestage.com... XXX.242.50.144Caching somestage.com => XXX.242.50.144Connecting to somestage.com|XXX.242.50.144|:443... connected.Created socket 3.Releasing 0x000000001b0a5e70 (new refcount 1).Initiating SSL handshake.Handshake successful; connected socket 3 to SSL handle 0x000000001b10ee40certificate: subject: /C=DK/postalCode=9210/ST=Aalborg/L=Aalborg S\xC3\x98/streetAddress=Indkildevej 6E/O=TBD/OU=TBD/OU=Issued through

TBD Manager/OU=Comodo PremiumSSL Legacy Wildcard/CN=*.somestag.com issuer: /C=GB/ST=Greater Manchester/L=Salford/O=Comodo CA Limited/CN=AAA Certificate ServicesX509 certificate successfully verified and matches host somestage.com

---request begin---POST /thepath HTTP/1.0. . . . . ---response begin---HTTP/1.1 200 OKDate: Fri, 13 Aug 2010 16:27:31 GMTServer: Apache/1.3.33 (Debian GNU/Linux) PHP/4.3.10-15 mod_ssl/2.8.22 OpenSSL/0.9.7e

wget Output

Page 23: Ssl in a nutshell

On most linux boxes Tcpdump Monitors traffic e.g. Monitor port 443tcpdump -i eth0 -v dst port 443

Wireshark Also monitors traffic (but a bit nicer UI) http://www.wireshark.org/

Debugging tools #3: tcpdump etc.

Page 24: Ssl in a nutshell

You shouldn’t need to go here . . . But if you do Bryan, Derrick, Pete and Frank can assist Basically there are config files and they point to the

usual suspects (Certs, Keys etc.) e.g.SSLVerifyClient requireSSLVerifyDepth 10SSLCertificateFile /etc/httpd/conf/ssl.crt/somecert

SSLCertificateKeyFile /etc/httpd/conf/ssl.key/somekey

Apache HTTP Server and SSL

Page 25: Ssl in a nutshell

At a high-level SSL is pretty straight-forward But the devil is in the details – keystores /

truststores, apache configuration, different aggregator environments . . . .

Plus add in server white listing . . .. When you hit a problem with SSL – first don’t panic!

Check your configuration (run.conf, keystore/truststore, apache settings – if appropriate).

We are here to help . . .

Summary

Page 26: Ssl in a nutshell

JSSE Reference Guide (for JDK 6)http://download.oracle.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html

http://download.oracle.com/javase/6/docs/technotes/guides/security/jsse/ReadDebug.html

Java Resources