Project

General

Profile

TLS-Design » History » Version 9

Tobias Wich, 10/15/2012 12:44 PM

1 5 Tobias Wich
h1. TLS-Design (iteration from 2012-10-08)
2
3
h2. TLS and related Classes
4
5
h3. BouncyCastle Classes
6
7
This diagram shows the TLS classes as available in the BouncyCastle library.
8 7 Tobias Wich
9
The "TlsCredentials":http://www.bouncycastle.org/docs/docs1.5on/org/bouncycastle/crypto/tls/TlsCredentials.html and "TlsSignerCredentials":http://www.bouncycastle.org/docs/docs1.5on/org/bouncycastle/crypto/tls/TlsSignerCredentials.html interface are located in the upper left of the diagram. These interfaces are used in a TLS client authentication to get the client certificate and to produce a signature. For the use of software certificates, BouncyCastle comes with the implementation "DefaultTlsSignerCredentials":http://www.bouncycastle.org/docs/docs1.5on/org/bouncycastle/crypto/tls/DefaultTlsSignerCredentials.html.
10
11 9 Tobias Wich
The common etry point for TLS based communication is the "TlsClient":http://www.bouncycastle.org/docs/docs1.5on/org/bouncycastle/crypto/tls/TlsClient.html interface in the lower left. In the current BC version, it has three abstract implementations ("DefaultTlsClient":http://www.bouncycastle.org/docs/docs1.5on/org/bouncycastle/crypto/tls/DefaultTlsClient.html "PSKTlsClient":http://www.bouncycastle.org/docs/docs1.5on/org/bouncycastle/crypto/tls/PSKTlsClient.html "SRPTlsClient":http://www.bouncycastle.org/docs/docs1.5on/org/bouncycastle/crypto/tls/SRPTlsClient.html) which are missing the "getAuthentication()":http://www.bouncycastle.org/docs/docs1.5on/org/bouncycastle/crypto/tls/TlsClient.html#getAuthentication() function.
12
The class returned by this function has two responsibilities. The fist is the validation of the server certificate and the second is the selection of a client credential depending on the supplied CAs. The CAs can be extracted from the "CertificateRequest":http://www.bouncycastle.org/docs/docs1.5on/org/bouncycastle/crypto/tls/CertificateRequest.html (see upper right) parameter in "getClientCredentials()":http://www.bouncycastle.org/docs/docs1.5on/org/bouncycastle/crypto/tls/TlsAuthentication.html#getClientCredentials(org.bouncycastle.crypto.tls.CertificateRequest).
13
14
The last relevant class in this diagram is the "TlsProtocolHandler":http://www.bouncycastle.org/docs/docs1.5on/org/bouncycastle/crypto/tls/TlsProtocolHandler.html. Given a bidirectional stream (usually based on a socket) and a TlsClient, a new bidirectional stream can be extracted which wraps the original stream in a TLS channel. This handler implements the general TLS protocol and triggers the certificate validation and client authentication.
15
16 5 Tobias Wich
!bc-tls-classes.png!
17
18
h3. Open eCard Classes
19
20
This diagram shows classes that make use of the BouncyCastle classes in order to select and use custom credentials for the TLS authentication.
21 6 Tobias Wich
!oec-tls-classes.png!
22 5 Tobias Wich
23
h3. Apache http-core Classes
24
25
!http-core-classes.png!
26
27
h2. Client creation
28
29
The two following diagrams show how the a TLS channel is established and reused.
30
31
!tls-client-creation.png!
32
!tls-client-reuse.png!
33
34
h2. Credential Selection
35
36
The following two activity charts show the process how a credential is selected for the authentication.
37
38
!select-certificate.png!
39
!select-certificate-from-handles.png!
40
41
42
h1. TLS Design (old version left here until design is finished)
43 1 Tobias Wich
44 2 Tobias Wich
h2. Bouncy Castle TLS authentication classes
45 1 Tobias Wich
!bc-tls.png!
46
47 2 Tobias Wich
h2. TLS authentication implementation classes
48 1 Tobias Wich
!sal-tls.png!
49
50 2 Tobias Wich
h2. TLS authentication sequence
51 1 Tobias Wich
!sal-tls-sequence.png!
52 3 Simon Potzernheim
53
h1. TLS Design by HSCoburg
54
55
h2. Bouncycastle Implementation Design - class diagramm
56 4 Simon Potzernheim
57
Description: TODO
58
59 3 Simon Potzernheim
!uml_bouncycastleimplementation.png!