tls.md 20.8 KB
Newer Older
mazenovi's avatar
mazenovi committed
1
# X.509 / TLS
mazenovi's avatar
mazenovi committed
2
3
4
5

# <i class="fa fa-user-secret" aria-hidden="true"></i>


mazenovi's avatar
mazenovi committed
6
7
8
9
10
11
12
13
14
### OpenSSL

* Implémenté en C
* Boîte à outils de chiffrement
  * bibliothèques cryptographie générale
  * bibliothèques implémentant le protocole SSL
  * commande en ligne
* Supporte SSL 2.0, SSL 3.0 et TLS 1.0
* Actuellement TLS 1.2
mazenovi's avatar
mazenovi committed
15
  * [ANSSI : privilégier TLS1.2 et tolérer TLS1.1 et TLS1.0](https://www.ssi.gouv.fr/uploads/2016/09/guide_tls_v1.1.pdf)
mazenovi's avatar
mazenovi committed
16
17
18
19
* Distribué sous une licence de type Apache


### GnuTLS
mazenovi's avatar
mazenovi committed
20

mazenovi's avatar
mazenovi committed
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
* Conforme aux spécifications de l'IETF
* Permet l'authentification via les certificats
  * X509
  * PGP
* A la différence d'OpenSSL, GnuTLS est compatible avec les licences GPL


### [X.509](https://fr.wikipedia.org/wiki/X.509)

* Norme Pour
  * certificats à clé publique
  * listes de révocation de certificats
  * attributs de certificat
  * algorithme de validation du chemin de certification

* UIT (agence de l'ONU le développement spécialisé dans les TIC )
  * v1: 1988, v2: 1993, v3: 1996
mazenovi's avatar
mazenovi committed
38
39


mazenovi's avatar
mazenovi committed
40
## [X.509](https://fr.wikipedia.org/wiki/X.509)
mazenovi's avatar
mazenovi committed
41

mazenovi's avatar
mazenovi committed
42
* Système hiérarchique d'autorités de certification
mazenovi's avatar
mazenovi committed
43
44
  * *certification authority* - ***CA***
    * une ***CA*** attribue un certificat liant
mazenovi's avatar
mazenovi committed
45
46
      * une clé publique
      * un nom distinctif
mazenovi's avatar
mazenovi committed
47
        * *Distinguished Name* - ***DN***
mazenovi's avatar
mazenovi committed
48
49


mazenovi's avatar
mazenovi committed
50
## [X.509](https://fr.wikipedia.org/wiki/X.509) DN
mazenovi's avatar
mazenovi committed
51

mazenovi's avatar
mazenovi committed
52
53
54
55
56
57
58
59
* *C*: Country
* *L*: Locality
* *ST*: State
* *O*: Organisation
* *SO*: Organizational Unit
* *CN*: Common Name
* *Street*: Adress
* *E*: Mail
mazenovi's avatar
mazenovi committed
60
61
62
63
64
65


#### Anatomie

* **Version de la norme**
* **Serial**
mazenovi's avatar
mazenovi committed
66
* Algorithme de signature du certificat
mazenovi's avatar
mazenovi committed
67
* **Issuer** le signataire (***DN*** de la ***CA***)
mazenovi's avatar
mazenovi committed
68
* **Validty** début fin de validité
mazenovi's avatar
mazenovi committed
69
* **Subject name** **DN** identifié par le certificat
mazenovi's avatar
mazenovi committed
70
71
72
73
* **Subject Public Key**
* Extensions (ajouté en v3)
  * paires clé / valeur

mazenovi's avatar
mazenovi committed
74
Le tout signé par la **CA**
mazenovi's avatar
mazenovi committed
75

mazenovi's avatar
mazenovi committed
76

mazenovi's avatar
mazenovi committed
77
#### Extensions
mazenovi's avatar
mazenovi committed
78

mazenovi's avatar
mazenovi committed
79
80
81
82
83
84
85
86
Informations ou contraintes d'utilisation
* **Key Usage**
* **Subject Key Identifier**
* **keyEncipherment** Algorithme de signature du certificat
* **rfc822Name** email address
* **dNSName** DNS name for a machine
* **uniformResourceIdentifier** URL
*  **iPAddress**
mazenovi's avatar
mazenovi committed
87
88


mazenovi's avatar
mazenovi committed
89
## Générer une clé RSA
mazenovi's avatar
mazenovi committed
90

mazenovi's avatar
mazenovi committed
91
92
```bash
$ openssl genrsa -out ca.key 4096
mazenovi's avatar
mazenovi committed
93
```
mazenovi's avatar
mazenovi committed
94

mazenovi's avatar
mazenovi committed
95
* 4096 représente la taille de la clé
mazenovi's avatar
mazenovi committed
96
* ca.key contient la clé privée ET la clé publique
mazenovi's avatar
mazenovi committed
97

mazenovi's avatar
mazenovi committed
98
99
```bash
$ openssl rsa -in ca.key -pubout
mazenovi's avatar
mazenovi committed
100
```
mazenovi's avatar
mazenovi committed
101

mazenovi's avatar
mazenovi committed
102
103
104
* Permet d'extraire la partie publique uniquement


mazenovi's avatar
mazenovi committed
105
## Générer un certificat
mazenovi's avatar
mazenovi committed
106

mazenovi's avatar
mazenovi committed
107
108
```bash
$ openssl req -new -x509 -days 1826 \
mazenovi's avatar
mazenovi committed
109
            -key ca.key -out ca.crt \
mazenovi's avatar
mazenovi committed
110
            -subj '/CN=m4z3.me'
mazenovi's avatar
mazenovi committed
111
112
```

mazenovi's avatar
mazenovi committed
113
114
```bash
$ cat ca.crt
mazenovi's avatar
mazenovi committed
115
116
117
-----BEGIN CERTIFICATE-----
MIIC/zCCAeegAwIBAgIJAM4FANszQweWMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNV
BAMMC2V4YW1wbGUuY29tMB4XDTE3MTAzMTExMzEzNFoXDTE3MTEzMDExMzEzNFow
mazenovi's avatar
mazenovi committed
118
```
mazenovi's avatar
mazenovi committed
119

mazenovi's avatar
mazenovi committed
120
[différences entre certificats](https://www.sslmarket.fr/ssl/help-la-difference-entre-certificats)
mazenovi's avatar
mazenovi committed
121
122


mazenovi's avatar
mazenovi committed
123
## Certificat auto-signé
mazenovi's avatar
mazenovi committed
124

mazenovi's avatar
mazenovi committed
125
* **Issuer** et **Subject** identiques
mazenovi's avatar
mazenovi committed
126
* Tout le monde peut en fabriquer
mazenovi's avatar
mazenovi committed
127
* Rejetés par défaut par les navigateurs
mazenovi's avatar
mazenovi committed
128

mazenovi's avatar
mazenovi committed
129

mazenovi's avatar
mazenovi committed
130
#### Faire parler un certificat
mazenovi's avatar
mazenovi committed
131
132
133
134
135

local

```bash
$ openssl x509 -text -noout -in ca.crt
mazenovi's avatar
mazenovi committed
136
```
mazenovi's avatar
mazenovi committed
137

mazenovi's avatar
mazenovi committed
138
distant
mazenovi's avatar
mazenovi committed
139

mazenovi's avatar
mazenovi committed
140
141
```bash
$ openssl s_client -connect isima.fr:443 -showcerts -servername isima.fr
mazenovi's avatar
mazenovi committed
142
```
mazenovi's avatar
mazenovi committed
143
144
145
146
147
148
149

* [Using OpenSSL’s s_client command with web servers using Server Name Indication (SNI)](https://major.io/2012/02/07/using-openssls-s_client-command-with-web-servers-using-server-name-indication-sni/)

usage du certificat

```bash
$ openssl x509 -purpose -in ca.crt  -inform PEM
mazenovi's avatar
mazenovi committed
150
```
mazenovi's avatar
mazenovi committed
151
152


mazenovi's avatar
mazenovi committed
153
## Faire parler un certificat
mazenovi's avatar
mazenovi committed
154
155
156
157
158
159

![Check CERT Firfox](images/ssl/check-cert-ff.png)

* Avec son navigateur en cliquant sur le cadenas


mazenovi's avatar
mazenovi committed
160
## Faire parler un certificat
mazenovi's avatar
mazenovi committed
161
162

![Check CERT Firfox](images/ssl/check-cert-ff2.png)
mazenovi's avatar
mazenovi committed
163
164


mazenovi's avatar
mazenovi committed
165
## Autorité de certificaiton (CA)
mazenovi's avatar
mazenovi committed
166

mazenovi's avatar
mazenovi committed
167
168
* Tiers de confiance
* Recueille les demandes de certifications
mazenovi's avatar
mazenovi committed
169
170
171
  * vérifie la validité de la demande
    * vérifie l'identité
      * preuve par contrôle des domaines
mazenovi's avatar
mazenovi committed
172
173
* Signe les certificats
* Gère les révocations
mazenovi's avatar
mazenovi committed
174

mazenovi's avatar
mazenovi committed
175

mazenovi's avatar
mazenovi committed
176
## Autorité de certificaiton (CA)
mazenovi's avatar
mazenovi committed
177

mazenovi's avatar
mazenovi committed
178
* ***CA*** de confiance  
mazenovi's avatar
mazenovi committed
179
  * importées par défaut dans le navigateur
mazenovi's avatar
mazenovi committed
180
    * Tout supprimer?
mazenovi's avatar
mazenovi committed
181
  * être importée dans les navigateurs
mazenovi's avatar
mazenovi committed
182
    * payer (le navigateur)
mazenovi's avatar
mazenovi committed
183
184


mazenovi's avatar
mazenovi committed
185
186
187
## Known good signers

![Known good signers](images/ssl/known-good-signers.png)
mazenovi's avatar
mazenovi committed
188

mazenovi's avatar
mazenovi committed
189
190
191
192

## [Root CA](https://fr.wikipedia.org/wiki/Certificat_racine)

Certificat racine
mazenovi's avatar
mazenovi committed
193

mazenovi's avatar
mazenovi committed
194
* Clés publiques non signées, ou auto-signées
mazenovi's avatar
mazenovi committed
195
  * le sommet de la pyramide de confiance  
mazenovi's avatar
mazenovi committed
196
197
198
  * un certificat est rarement signé par une ***CA*** racine
  * la ***CA*** racine créée plusieurs ***CA*** intermédiaires
    * sous scellés / déconnectés / sortis (autre ***CA***)
mazenovi's avatar
mazenovi committed
199
    * auto signé
mazenovi's avatar
mazenovi committed
200

mazenovi's avatar
mazenovi committed
201
202
[DigiCert Trusted Root Authority Certificates](https://www.digicert.com/digicert-root-certificates.htm)

mazenovi's avatar
mazenovi committed
203

mazenovi's avatar
mazenovi committed
204
## Chain of trust
mazenovi's avatar
mazenovi committed
205

mazenovi's avatar
mazenovi committed
206
Chaînes de certification
mazenovi's avatar
mazenovi committed
207

mazenovi's avatar
mazenovi committed
208
* Les ***CA*** intermédiaires signent
mazenovi's avatar
mazenovi committed
209
  * les certificats des clients
mazenovi's avatar
mazenovi committed
210
  * d'autres ***CA*** intermédiaires
mazenovi's avatar
mazenovi committed
211
212
    * il faut alors fournir la chaîne de certification
      * au cas où l'intermédiaire ne soit pas dans le navigateur
mazenovi's avatar
mazenovi committed
213
214


mazenovi's avatar
mazenovi committed
215
## CA connues
mazenovi's avatar
mazenovi committed
216

mazenovi's avatar
mazenovi committed
217
218
219
* [digicert](https://www.digicert.com/)
  * [verisign](https://www.websecurity.symantec.com/fr/fr/ssl-certificate)
* [Comodo](https://www.comodo.com/)
mazenovi's avatar
mazenovi committed
220
* ...
mazenovi's avatar
mazenovi committed
221
222
223
224
* Gratuites
  * [StartSSL free](https://www.startcomca.com/index/support?v=1)
  * [CAcert](http://www.cacert.org/) (not known good signers)
  * [Let's Encrypt](https://letsencrypt.org/) fondé par l'[EFF](https://www.eff.org/fr) et [Mozilla](https://www.mozilla.org/fr/)
mazenovi's avatar
mazenovi committed
225

mazenovi's avatar
mazenovi committed
226

mazenovi's avatar
mazenovi committed
227
## CA & Firefox
mazenovi's avatar
mazenovi committed
228

mazenovi's avatar
mazenovi committed
229
![Warning](images/ssl/https-ff.png)
mazenovi's avatar
mazenovi committed
230
231


mazenovi's avatar
mazenovi committed
232
## CA & Chrome
mazenovi's avatar
mazenovi committed
233

mazenovi's avatar
mazenovi committed
234
![Warning](images/ssl/https-chrome.png)
mazenovi's avatar
mazenovi committed
235
236


mazenovi's avatar
mazenovi committed
237
## Différentes causes
mazenovi's avatar
mazenovi committed
238

mazenovi's avatar
mazenovi committed
239
240
241
242
* Certificat différent du nom de domaine
  * wildcard
    * https://amendes.gouv.fr
* Certificats expirés
mazenovi's avatar
mazenovi committed
243
* ***CA*** non importée
mazenovi's avatar
mazenovi committed
244
* ...
mazenovi's avatar
mazenovi committed
245
246


mazenovi's avatar
mazenovi committed
247
248
## Certificate Sign Request
### (CSR)
mazenovi's avatar
mazenovi committed
249

mazenovi's avatar
mazenovi committed
250
251
```bash
$ openssl req -new -newkey rsa:2048 -sha256 \
mazenovi's avatar
mazenovi committed
252
253
254
            -nodes -out user.csr -keyout user.key \
            -subj '/CN=example.com'
```
mazenovi's avatar
mazenovi committed
255

mazenovi's avatar
mazenovi committed
256
* Générer un requête de certification
mazenovi's avatar
mazenovi committed
257
* Un ***CSR*** est auto-signé (pour vérifier l'intégrité)
mazenovi's avatar
mazenovi committed
258
259
260

```bash
$ openssl req -in user.csr -text -noout
mazenovi's avatar
mazenovi committed
261
```
mazenovi's avatar
mazenovi committed
262

mazenovi's avatar
mazenovi committed
263
* Lire le ***CSR***
mazenovi's avatar
mazenovi committed
264

mazenovi's avatar
mazenovi committed
265
266
```bash
$ openssl req -text -noout -verify -in user.csr
mazenovi's avatar
mazenovi committed
267
268
```

mazenovi's avatar
mazenovi committed
269
* Vérifier le ***CSR***
mazenovi's avatar
mazenovi committed
270
271


mazenovi's avatar
mazenovi committed
272
### Création d'un certificat à partir d'un CSR
mazenovi's avatar
mazenovi committed
273
274
275

```bash
$ openssl x509 -req -days 365 \
mazenovi's avatar
mazenovi committed
276
277
278
279
280
       -CA ca.crt -CAkey ca.key \
       -CAcreateserial -CAserial serial \
       -in user.csr -out user.crt \
```

mazenovi's avatar
mazenovi committed
281
282
283
284
285
* Génèrer un certificat à partir d'un ***CSR***
  * la ***CA*** vérifie qu'elle gère le domaine
  * la ***CA*** ajoute quelques informations
  * la ***CA*** signe avec sa clé privée
    * la ***CA*** protège sa clé privée
mazenovi's avatar
mazenovi committed
286

mazenovi's avatar
mazenovi committed
287
288
note:
- https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs
mazenovi's avatar
mazenovi committed
289

mazenovi's avatar
mazenovi committed
290

mazenovi's avatar
mazenovi committed
291
## Vérification de la signature
mazenovi's avatar
mazenovi committed
292

mazenovi's avatar
mazenovi committed
293
294
295
```bash
$ openssl verify -CAfile ca.crt user.crt
user.crt: OK
mazenovi's avatar
mazenovi committed
296
297
```

mazenovi's avatar
mazenovi committed
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
```bash
$ openssl x509 -text -noout -in user.crt
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
            f0:61:f4:c1:96:86:21:07
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN=m4z3.me
        Validity
            Not Before: Jan 18 17:27:54 2018 GMT
            Not After : Jan 18 17:27:54 2019 GMT
        Subject: CN=example.com
```
note:
- https://stackoverflow.com/questions/25482199/verify-a-certificate-chain-using-openssl-verify
mazenovi's avatar
mazenovi committed
314
315


mazenovi's avatar
mazenovi committed
316
317
## Signer un fichier

mazenovi's avatar
mazenovi committed
318
319
[Sign and verify text files to public keys via the OpenSSL Command Line](https://raymii.org/s/tutorials/Sign_and_verify_text_files_to_public_keys_via_the_OpenSSL_Command_Line.html)

mazenovi's avatar
mazenovi committed
320

mazenovi's avatar
mazenovi committed
321
322
323
#### Certificate Revocation List (CRL)

Révocation de certificats
mazenovi's avatar
mazenovi committed
324

mazenovi's avatar
mazenovi committed
325
326
* Contient une liste de certificats valides à révoquer
  * utile en cas de compromission / décommissionnement
mazenovi's avatar
mazenovi committed
327
328
329
330
331
    * informer la ***CA***
    * la ***CA*** ajoute le certificat à sa liste de certificats révoqués
    * cette liste est signée par la ***CA***
* Souvent la clé qui signe les certificats signe les ***CRL***
* Quand que le navigateur interroge-t-il les ***CRL*** ?
mazenovi's avatar
mazenovi committed
332
333


mazenovi's avatar
mazenovi committed
334
####  Certificate Revocation List (CRL)
mazenovi's avatar
mazenovi committed
335

mazenovi's avatar
mazenovi committed
336
* Serial
mazenovi's avatar
mazenovi committed
337
338
* Algorithme de signature de la ***CRL***
* **Issuer** le signataire (***DN*** de la ***CA***)
mazenovi's avatar
mazenovi committed
339
340
341
342
343
344
345
346
* **Update date **
* **Next Update date**
* **CRL**
  * revoked 1
  ...
  * revoked 1
* Extensions
  * paires clé / valeur
mazenovi's avatar
mazenovi committed
347

mazenovi's avatar
mazenovi committed
348
349
350
note:
- next update parce que CRL delta

mazenovi's avatar
mazenovi committed
351

mazenovi's avatar
mazenovi committed
352
## Revocation reason
mazenovi's avatar
mazenovi committed
353

mazenovi's avatar
mazenovi committed
354
355
356
357
358
359
360
361
362
363
* unspecified (0)
* keyCompromise (1)
* CACompromise (2)
* affiliationChanged (3)
* superseded (4)
* cessationOfOperation (5)
* certificateHold (6)
* removeFromCRL (8)
* privilegeWithdrawn (9)
* AACompromise (10)
mazenovi's avatar
mazenovi committed
364
365


mazenovi's avatar
mazenovi committed
366
367
368
#### Online Certificate Status Protocol (OCSP)

Protocole d’interrogation de validité pour un certificat
mazenovi's avatar
mazenovi committed
369

mazenovi's avatar
mazenovi committed
370
371
![OCSP](images/ssl/OCSP.png)

mazenovi's avatar
mazenovi committed
372
* si l'***OCSP*** n'est pas disponible pour le certificat firefox accepte le certificat
mazenovi's avatar
mazenovi committed
373
374
375
376
377
  * s'il est valide


#### Online Certificate Status Protocol (OCSP)

mazenovi's avatar
mazenovi committed
378
* Peu déployé
mazenovi's avatar
mazenovi committed
379
380
* [Approche par log publique de création révocation](http://confiance-numerique.clermont-universite.fr/Slides/R-Sasse.pdf) [<i class="fa fa-video-camera"></i>](http://webtv.u-clermont1.fr/media-MEDIA150907102804168)
* [Google's Certificate Transparency project](http://www.certificate-transparency.org/)
mazenovi's avatar
mazenovi committed
381
382


mazenovi's avatar
mazenovi committed
383
## <strike>SSL</strike> / TLS
mazenovi's avatar
mazenovi committed
384
385

* Crée un canal de communication **authentifié**, protégé en **confidentialité** et en **intégrité**
mazenovi's avatar
mazenovi committed
386
* Utilise des certificats X.509
mazenovi's avatar
mazenovi committed
387
  * délivrés par des ***CA***
mazenovi's avatar
mazenovi committed
388
* Utilise un système de chiffrement asymétrique
mazenovi's avatar
mazenovi committed
389
390
391
  * pour échanger une clé pour le chiffrement symétrique
* Protocole initialement pensé pour sécurisé HTTP
  * étendu à d'autres services (SMTP, LDAP, VPN, ...)
mazenovi's avatar
mazenovi committed
392

mazenovi's avatar
mazenovi committed
393

mazenovi's avatar
mazenovi committed
394
## TLS dans le modèle TCP/IP
mazenovi's avatar
mazenovi committed
395

mazenovi's avatar
mazenovi committed
396
![SSL/TLS in TCP/IP model](images/ssl/tcp-ip_model_ssl-tls_protocol.png)
mazenovi's avatar
mazenovi committed
397
398
399

* Couche intermédiaire car indépendante du protocole utilisé

mazenovi's avatar
mazenovi committed
400

mazenovi's avatar
mazenovi committed
401
402
403
404
405
406
407
## Versions SSL

Secure Socket Layer

* **1.0** par Netscape en 1994, pas de public release
* **2.0** par Netscape en Février 1995, [The SSL Protocol Version 2.0](http://www.frameip.com/rfc/draftxxx.php)
* **3.0** par Netscape en Novembre 1996, [The SSL Protocol Version 3.0](http://www.frameip.com/rfc/draft302.php)
mazenovi's avatar
mazenovi committed
408
409


mazenovi's avatar
mazenovi committed
410
## Versions TLS
mazenovi's avatar
mazenovi committed
411

mazenovi's avatar
mazenovi committed
412
Transport Layer Security
mazenovi's avatar
mazenovi committed
413

mazenovi's avatar
mazenovi committed
414
415
416
417
* **1.0** released en janvier 1999, [RFC 2246](http://www.frameip.com/rfc/rfc2246.php)
  * **TLS 1.0** = SSL 3.1 [IETF](http://www.ietf.org/)
* **1.1** released en Avril 2006, [RFC 4346](http://www.frameip.com/rfc/rfc3546.php)
* **1.2** released en Août 2008, [RFC 5246](http://www.frameip.com/rfc/rfc4366.php)
mazenovi's avatar
mazenovi committed
418
419


mazenovi's avatar
mazenovi committed
420
## [Cypher suite](https://fr.wikipedia.org/wiki/Suite_cryptographique)
mazenovi's avatar
mazenovi committed
421

mazenovi's avatar
mazenovi committed
422
Suite cryptographique
mazenovi's avatar
mazenovi committed
423

mazenovi's avatar
mazenovi committed
424
425
426
427
* échange de clés
* authentification des parties
* chiffrer les données applicatives
* protéger les données applicatives en intégrité (MAC)
mazenovi's avatar
mazenovi committed
428

mazenovi's avatar
mazenovi committed
429
**Cipher suites** gérées par un système
mazenovi's avatar
mazenovi committed
430

mazenovi's avatar
mazenovi committed
431
<pre><code class="hljs bash" style="font-size: 35px">$ openssl ciphers -v</code></pre>
mazenovi's avatar
mazenovi committed
432
433


mazenovi's avatar
mazenovi committed
434
## TLS_RSA_WITH_RC4_128_MD5
mazenovi's avatar
mazenovi committed
435

mazenovi's avatar
mazenovi committed
436
  Se lit
mazenovi's avatar
mazenovi committed
437
438
439

* [RSA](https://fr.wikipedia.org/wiki/Chiffrement_RSA)
  * authentification du serveur
mazenovi's avatar
mazenovi committed
440
* RC4_128 = algorithme de chiffrement [RC4](https://fr.wikipedia.org/wiki/RC4) avec clé de 128 bits
mazenovi's avatar
mazenovi committed
441
442
443
444
445
  * pour chiffrer le canal de communication
* [MD5](https://fr.wikipedia.org/wiki/MD5)  
  * protection de l'intégrité du canal de communication  via [HMAC MD5](https://fr.wikipedia.org/wiki/Keyed-Hash_Message_Authentication_Code)


mazenovi's avatar
mazenovi committed
446
![TLS Handshake](images/ssl/TLS-Handshake.png "SSLv2 Handshake")
mazenovi's avatar
mazenovi committed
447
448


mazenovi's avatar
mazenovi committed
449
## clienthello
mazenovi's avatar
mazenovi committed
450

mazenovi's avatar
mazenovi committed
451
Le client
mazenovi's avatar
mazenovi committed
452

mazenovi's avatar
mazenovi committed
453
* envoie les suites cryptographiques qu'il est capable de mettre en oeuvre
mazenovi's avatar
mazenovi committed
454
455


mazenovi's avatar
mazenovi committed
456
## Réponse serveur
mazenovi's avatar
mazenovi committed
457

mazenovi's avatar
mazenovi committed
458
459
460
461
462
463
464
465
466
467
468
Le serveur
  * Si aucune suite n'est satisfaisante
    * **Alert** fin de connexion
  * Sinon
    * **ServerHello** suite cryptographique choisie
    * **ServerRandom** valeur aléatoire (publique)
    * **Certificate** certificat du serveur
    * **ServerHelloDone** indiquant qu'il est attente d'une réponse du client


#### Négociation de la suite cryptographique
mazenovi's avatar
mazenovi committed
469

mazenovi's avatar
mazenovi committed
470
* Tous les serveurs web ne négocient pas les cypher suites de la même façon
mazenovi's avatar
mazenovi committed
471
472
  * **IIS** prend la première suite cryptographique préférée du serveur et proposée par le client
  * **Apache** prend la première suite proposée par le client et supportée par le serveur
mazenovi's avatar
mazenovi committed
473
474
    * permet une baisse du niveau de sécurité
    *  *SSLHonorCipherOrder* pour sécuriser
mazenovi's avatar
mazenovi committed
475

mazenovi's avatar
mazenovi committed
476
[SSL / TLS Renegotiation Handshakes MiTM Plaintext Data Injection- medium or low      risk?](https://security.stackexchange.com/questions/63867/ssl-tls-renegotiation-handshakes-mitm-plaintext-data-injection-medium-or-low)
mazenovi's avatar
mazenovi committed
477
478


mazenovi's avatar
mazenovi committed
479
## Fin de négociation
mazenovi's avatar
mazenovi committed
480

mazenovi's avatar
mazenovi committed
481
Le client
mazenovi's avatar
mazenovi committed
482

mazenovi's avatar
mazenovi committed
483
484
485
486
  * Vérifie la validité du certificat
  * Génère une clé de chiffrement symétrique  
    * **secret partagé** ou **pre master secret**
  * Chiffre le **secret partagé** avec la clé publique du serveur
mazenovi's avatar
mazenovi committed
487
488


mazenovi's avatar
mazenovi committed
489
## Fin de négociation
mazenovi's avatar
mazenovi committed
490

mazenovi's avatar
mazenovi committed
491
Le client envoie au serveur
mazenovi's avatar
mazenovi committed
492

mazenovi's avatar
mazenovi committed
493
494
495
496
497
  * **ClientKeyExchange** le **secret partagé** chiffré
  * **ChangeCipherSpec** paramètres pour la suite cryptographique choisie
  * **Finished** fin de négociation
    * premier message chiffré symétriquement
      * avec **secret partagé** et **ServerRandom**
mazenovi's avatar
mazenovi committed
498
499


mazenovi's avatar
mazenovi committed
500
## Fin de négociation
mazenovi's avatar
mazenovi committed
501

mazenovi's avatar
mazenovi committed
502
Le serveur
mazenovi's avatar
mazenovi committed
503

mazenovi's avatar
mazenovi committed
504
505
506
507
  * Reçoit le **secret partagé** chiffré généré par le client
  * Déchiffre le **secret partagé** avec sa clé privée
  * **ChangeCipherSpec** paramètres pour la suite cryptographique choisie
  * **Finished** fin de négociation
mazenovi's avatar
mazenovi committed
508

mazenovi's avatar
mazenovi committed
509
<br />
mazenovi's avatar
mazenovi committed
510

mazenovi's avatar
mazenovi committed
511
#### La suite de la communication est chiffrée symétriquement
mazenovi's avatar
mazenovi committed
512
513


mazenovi's avatar
mazenovi committed
514
## Connexion SSL/TLS
mazenovi's avatar
mazenovi committed
515

mazenovi's avatar
mazenovi committed
516
517
518
* Le client a authentifié le serveur
  * mais le serveur n’a aucune information sur le client
    * possibilité d'avoir un certificat côté client
mazenovi's avatar
mazenovi committed
519

mazenovi's avatar
mazenovi committed
520
521
* Les paramètres de chiffrements
  * sont négociés et « jetables »
mazenovi's avatar
mazenovi committed
522
523


mazenovi's avatar
mazenovi committed
524
## Certificats clients
mazenovi's avatar
mazenovi committed
525

mazenovi's avatar
mazenovi committed
526
527
528
529
* Un client peut présenter un certificat au serveur
* Le serveur vérifie si le certificat est signé par une CA de confiance
* Le serveur peut utiliser ces informations pour authentifier l’utilisateur
* Le certificat peut être stocké dans un périphérique (e.g. [Yubikey](https://www.yubico.com/)), une carte à puce (e.g. [CPS](https://fr.wikipedia.org/wiki/Carte_de_Professionnel_de_Sant%C3%A9)), ...
mazenovi's avatar
mazenovi committed
530
531


mazenovi's avatar
mazenovi committed
532
## Vulnérabilité TLS_RSA_WITH_RC4_128_MD5
mazenovi's avatar
mazenovi committed
533

mazenovi's avatar
mazenovi committed
534
535
536
537
538
539
* si la clé privée du serveur est récupérée
  * le **secret partagé** est récupérable
    * on peut obtenir les clés de session
      * toutes les communications sont alors déchiffrables
        * passées
        * futures
mazenovi's avatar
mazenovi committed
540

mazenovi's avatar
mazenovi committed
541
542
543
544
545
546
547
548
549
550
551

## Perfect Forward Secrecy (PFS)

*Confidentialité Persistante*

* La clé compromission d'un clé privée n'affecte pas la confidentialité des communications passées
  * utilisée uniquement pour signer
* [Problème NP-complet](https://fr.wikipedia.org/wiki/Probl%C3%A8me_NP-complet)


![Diffie-Hellman exchange](images/ssl/diffie-hellman-exchange.png "Diffie-Hellman exchange")
mazenovi's avatar
mazenovi committed
552

mazenovi's avatar
mazenovi committed
553

mazenovi's avatar
mazenovi committed
554
555
556
557
558
559
560
561
562
## Certification Authority Authorization (CAA)

* Une CA peut vérifier si elle est autorisée à émettre un certificat pour un domaine via le DNS (enregistrement CAA)

* Devenu obligatoire le 8 septembre 2017

* Le 9 septembre 2017, Comodo s’est fait pincer pour ne pas le respecter :
[Comodo Caught Breaking New CAA Standard One Day After It Went Into Effect](https://www.bleepingcomputer.com/news/security/comodo-caught-breaking-new-caa-standard-one-day-after-it-went-into-effect/)

mazenovi's avatar
mazenovi committed
563
564
565
566
Note:
- cas où un domaine est déjà enregistré chez un CA (let's encrypt)
  - et qu'une autre CA lui délivre un certificat
  - Comodo n'en a pas tenu compte
mazenovi's avatar
mazenovi committed
567
568
569
570
571
572
573
574
575


## DNS-Based Authentication of Named Entities (DANE)

* Publication du certificat dans un enregistrement TLSA du DNS, protégé par DNSSEC

* Validation par les clients


mazenovi's avatar
mazenovi committed
576
577
578
579
580
581
582
583
584
585
## HTTPS

* HTTP + SSL/TLS = HTTPS assure
  * Confidentialité
    * [Session Hijacking](http://en.wikipedia.org/wiki/Session_hijacking)
      * [les dangers du wifi](https://wiki.wireshark.org/CaptureSetup/WLAN)
        * [firesheep](http://codebutler.github.io/firesheep/)
  * Intégrité
  * Authentification (via les certificats)

mazenovi's avatar
mazenovi committed
586
587
588

## Apache

mazenovi's avatar
mazenovi committed
589
590
591
592
593
594
595
596
597
* __Open SSL__
  * mod_ssl
* __GnuTLS__
  * [mod_gnutls](https://technique.arscenic.org/lamp-linux-apache-mysql-php/apache-le-serveur-http/modules-complementaires/article/installer-et-configurer-le-module)


## Que "chiffre" https

* On ne voit pas l'url dans le traffic
mazenovi's avatar
mazenovi committed
598
599
  * on voit l'ip de l'hôte
  * on voit ventuellement les requêtes DNS
mazenovi's avatar
mazenovi committed
600
* Proxy https ou VPN anonymisent complètement le traffic
mazenovi's avatar
mazenovi committed
601
602
603
604
605
606
607
608
609

Note:
- Attention les proxy
  - surtout anonymes sont de faux amis
  - ce n'est pas un vpn
  - pose des problèmes de certificats
    - proxy https = MITM


mazenovi's avatar
mazenovi committed
610
## Vulnérabilités multiples
mazenovi's avatar
mazenovi committed
611

mazenovi's avatar
mazenovi committed
612
613
614
615
616
617
618
619
620
621
622
623
624
625
* [2015] [Weak Diffie-Hellman and the Logjam Attack](https://weakdh.org/)
  * permet de forcé les connexions TLS à 512-bit export-grade cryptography
  * [Freack Attack](https://freakattack.com/) réminiscence
* [2014] [Poddle](http://www.dwheeler.com/essays/poodle-sslv3.html)
  * [POODLE test](https://www.poodletest.com/)
* [2014] [Heartbleed](https://fr.wikipedia.org/wiki/Heartbleed)
  * lecture de la mémoire du serveur via un heartbeat


## Vulnérabilités multiples

* [OpenSSL vulnerabilities](https://www.openssl.org/news/vulnerabilities.html)
* [GnuTLS security](http://www.gnutls.org/security.html)
* [Les attaques SSL / TLS](https://korben.info/les-attaques-ssltls.html)
mazenovi's avatar
mazenovi committed
626
* [Public Key Infrastructure (PKI)](https://fr.wikipedia.org/wiki/Infrastructure_%C3%A0_cl%C3%A9s_publiques)
mazenovi's avatar
mazenovi committed
627
  * [Certificate authorities issue SSL certificates to fraudsters](http://news.netcraft.com/archives/2015/10/12/certificate-authorities-issue-hundreds-of-deceptive-ssl-certificates-to-fraudsters.html)  
mazenovi's avatar
mazenovi committed
628
629


mazenovi's avatar
mazenovi committed
630
## <i class="fa fa-gears"></i> Tests serveurs
mazenovi's avatar
mazenovi committed
631
632

* Tester un certificat SSL
mazenovi's avatar
mazenovi committed
633
634
  * [SSL Decoder](https://ssldecoder.org/)
  * [Certificate Expiry Monitor](https://certificatemonitor.org/)
mazenovi's avatar
mazenovi committed
635
636
637
* Tester une configuration SSL
  * [Qualys](https://www.ssllabs.com/ssltest/)
  * [Comodo ssl analyzer](https://sslanalyzer.comodoca.com/)
mazenovi's avatar
mazenovi committed
638
639
640
  * [OpenSSL Decoder](https://raymii.org/s/software/OpenSSL_Decoder.html)
  * [Strong SSL Security On nginx](https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html)

mazenovi's avatar
mazenovi committed
641
642
* [<i class="fa fa-gitlab"></i> Monter un serveur https avec apache](https://gitlab.isima.fr/mazenovi/tp-www-ssl)

mazenovi's avatar
mazenovi committed
643
644
645
646
647
648
649
650

## <i class="fa fa-gears"></i> Tests navigateurs

* [SSL Cipher Suite Details of Your Browser](https://cc.dcsec.uni-hannover.de/)
* [How's my SSL?](https://www.howsmyssl.com/)
* [<i class="fa fa-firefox"></i> Toggle Cipher Suites](https://addons.mozilla.org/fr/firefox/addon/toggle-cipher-suites/)
  * [<i class="fa fa-github"></i> Toggle Cipher Suites](https://github.com/dillbyrne/toggle-cipher-suites/releases)
* [<i class="fa fa-github"></i> Calomel SSL validator](https://addons.mozilla.org/fr/firefox/addon/calomel-ssl-validation/)
mazenovi's avatar
mazenovi committed
651
652
653
654
655
656
657
658
659

Note:
- aspect arbitraire de la notation notamment qualys
  - méfiance quand il y aquelque chose à vendre
- SSL en fait TLS on est d'accord


## <i class="fa fa-medkit"></i> Se protéger

mazenovi's avatar
mazenovi committed
660
661
662
663
* un service sans **s** est un problème
  * pas ftp, mais sftp ou ftps
  * pas rsync, mais rsync over sssh
  * pas imap, pop3 et smtp, mais imaps, pop3s et smtps
mazenovi's avatar
mazenovi committed
664
665
* Seules les implémentations conformes à TLSv1 et supérieures doivent être employées
* Les cyphersuites offrant la PFS doivent être favorisées
mazenovi's avatar
mazenovi committed
666
* [Anssi - SSL/TLS: état des lieux et recommandations](https://www.ssi.gouv.fr/uploads/2012/06/ssl_tls_etat_des_lieux_et_recommandations.pdf)
mazenovi's avatar
mazenovi committed
667
668


mazenovi's avatar
mazenovi committed
669
## <i class="fa fa-medkit"></i> Se protéger / Apache
mazenovi's avatar
mazenovi committed
670

mazenovi's avatar
mazenovi committed
671
672
673
674
* [Chiffrement fort SSL/TLS : Mode d'emploi](https://httpd.apache.org/docs/2.4/fr/ssl/ssl_howto.html)
* [Hardening Your Web Server’s SSL Ciphers](https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/)
* [ssllabs.com's own Apache SSL Config Directives](https://community.qualys.com/thread/9652)
* [Apache web server SSL best practices](https://wiki.fysik.dtu.dk/it/SSL_best_practices)
mazenovi's avatar
mazenovi committed
675
676


mazenovi's avatar
mazenovi committed
677
## <i class="fa fa-medkit"></i> Se protéger / Nginx
mazenovi's avatar
mazenovi committed
678

mazenovi's avatar
mazenovi committed
679
680
* [HTTPS on Nginx: From Zero to A+ (Part 1)](https://juliansimioni.com/blog/https-on-nginx-from-zero-to-a-plus-part-1/)
* [HTTPS on Nginx: From Zero to A+ (Part 2)](https://juliansimioni.com/blog/https-on-nginx-from-zero-to-a-plus-part-2-configuration-ciphersuites-and-performance/)
mazenovi's avatar
mazenovi committed
681
682


mazenovi's avatar
mazenovi committed
683
#### <i class="fa fa-medkit"></i> Se protéger / tout serveur
mazenovi's avatar
mazenovi committed
684

mazenovi's avatar
mazenovi committed
685
686
* [https://cipherli.st/](https://cipherli.st/) pour une conf sécurisée
  * [<i class="fa fa-warning"></i> Modifier tous les vhosts pour nginx!!](http://serverfault.com/questions/641150/nginx-cant-disable-sslv3)
mazenovi's avatar
mazenovi committed
687

mazenovi's avatar
mazenovi committed
688
* fixer le [weak Diffie-Hellman (aka logjam Attack](https://weakdh.org/))
mazenovi's avatar
mazenovi committed
689
690
691
692
693
694
  <pre><code class="hljs bash" style="font-size: 28px"> openssl dhparam -out dhparams.pem 2048 </code></pre>

* suivre les [<i class="fa fa-book"></i> recommandations de l'ANSSI](https://www.ssi.gouv.fr/agence/publication/ssltls-3-ans-plus-tard/)


#### A lire
mazenovi's avatar
mazenovi committed
695

mazenovi's avatar
mazenovi committed
696
697
* [Déroulement des échanges ssl en détail](https://www.securiteinfo.com/cryptographie/ssl.shtml)
* [Comprendre SSL/TLS - 1, 2, 3, 4, 5](https://blog.eleven-labs.com/fr/comprendre-ssl-tls-partie-1/)
mazenovi's avatar
mazenovi committed
698
699
* [CaenCamp #33 : Infrastructures à clés publiques](https://www.youtube.com/watch?v=9zNAUFtw7Ac) par [Romain Tartiaire](https://romain.blogreen.org/)
* [Chrome, Firefox et recherches Google : passage en force du HTTPS ](http://dareboost.developpez.com/tutoriels/securite-web/https-nouveaute-recherche-google-chrome-firefox/)
mazenovi's avatar
mazenovi committed
700
* [http://cypherpunks.to/~peter/T2a_X509_Certs.pdf](http://www.cypherpunks.to/~peter/T2a_X509_Certs.pdf)