tls.md 21.4 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
15
16
17
18
### 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
* Distribué sous une licence de type Apache


### GnuTLS
mazenovi's avatar
mazenovi committed
19

mazenovi's avatar
mazenovi committed
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
* 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
37
38


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

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


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

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


#### Anatomie

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

Le tout signé par la CA

mazenovi's avatar
mazenovi committed
75

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

mazenovi's avatar
mazenovi committed
78
79
80
81
82
83
84
85
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
86
87


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

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

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

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

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


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

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

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

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


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

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

mazenovi's avatar
mazenovi committed
128

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

local

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

mazenovi's avatar
mazenovi committed
137
distant
mazenovi's avatar
mazenovi committed
138

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

* [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
149
```
mazenovi's avatar
mazenovi committed
150
151


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

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

* Avec son navigateur en cliquant sur le cadenas


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

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


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

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

mazenovi's avatar
mazenovi committed
174

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

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


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

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

mazenovi's avatar
mazenovi committed
188
189
190
191

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

Certificat racine
mazenovi's avatar
mazenovi committed
192

mazenovi's avatar
mazenovi committed
193
* clés publiques non signées, ou auto-signées
mazenovi's avatar
mazenovi committed
194
195
196
197
198
  * le sommet de la pyramide de confiance  
  * 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)
    * auto signé
mazenovi's avatar
mazenovi committed
199
200


mazenovi's avatar
mazenovi committed
201
## Chain of trust
mazenovi's avatar
mazenovi committed
202

mazenovi's avatar
mazenovi committed
203
Chaînes de certification
mazenovi's avatar
mazenovi committed
204

mazenovi's avatar
mazenovi committed
205
206
207
208
209
* Les CA intermédiaires signent
  * les certificats des clients
  * d'autres CA intermédiaires
    * 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
210
211


mazenovi's avatar
mazenovi committed
212
## CA connues
mazenovi's avatar
mazenovi committed
213

mazenovi's avatar
mazenovi committed
214
215
216
* [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
217
* ...
mazenovi's avatar
mazenovi committed
218
219
220
221
* 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
222

mazenovi's avatar
mazenovi committed
223

mazenovi's avatar
mazenovi committed
224
## CA & Firefox
mazenovi's avatar
mazenovi committed
225

mazenovi's avatar
mazenovi committed
226
![Warning](images/ssl/https-ff.png)
mazenovi's avatar
mazenovi committed
227
228


mazenovi's avatar
mazenovi committed
229
## CA & Chrome
mazenovi's avatar
mazenovi committed
230

mazenovi's avatar
mazenovi committed
231
![Warning](images/ssl/https-chrome.png)
mazenovi's avatar
mazenovi committed
232
233


mazenovi's avatar
mazenovi committed
234
## Différentes causes
mazenovi's avatar
mazenovi committed
235

mazenovi's avatar
mazenovi committed
236
237
238
239
* Certificat différent du nom de domaine
  * wildcard
    * https://amendes.gouv.fr
* Certificats expirés
mazenovi's avatar
mazenovi committed
240
* Autorité de certification non importée
mazenovi's avatar
mazenovi committed
241
* ...
mazenovi's avatar
mazenovi committed
242
243


mazenovi's avatar
mazenovi committed
244
245
## Certificate Sign Request
### (CSR)
mazenovi's avatar
mazenovi committed
246

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

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

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

mazenovi's avatar
mazenovi committed
260
* Lire le CSR
mazenovi's avatar
mazenovi committed
261

mazenovi's avatar
mazenovi committed
262
263
```bash
$ openssl req -text -noout -verify -in user.csr
mazenovi's avatar
mazenovi committed
264
265
```

mazenovi's avatar
mazenovi committed
266
267
268
* Vérifier le CSR


mazenovi's avatar
mazenovi committed
269
### Création d'un certificat à partir d'un CSR
mazenovi's avatar
mazenovi committed
270
271
272

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

mazenovi's avatar
mazenovi committed
278
279
280
281
282
* 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
283

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

mazenovi's avatar
mazenovi committed
287

mazenovi's avatar
mazenovi committed
288
## Vérification de la signature
mazenovi's avatar
mazenovi committed
289

mazenovi's avatar
mazenovi committed
290
291
292
```bash
$ openssl verify -CAfile ca.crt user.crt
user.crt: OK
mazenovi's avatar
mazenovi committed
293
294
```

mazenovi's avatar
mazenovi committed
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
```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
311
312


mazenovi's avatar
mazenovi committed
313
314
## Signer un fichier

mazenovi's avatar
mazenovi committed
315
316
[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
317

mazenovi's avatar
mazenovi committed
318
319
320
#### Certificate Revocation List (CRL)

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

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


mazenovi's avatar
mazenovi committed
331
####  Certificate Revocation List (CRL)
mazenovi's avatar
mazenovi committed
332

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

mazenovi's avatar
mazenovi committed
345
346
347
note:
- next update parce que CRL delta

mazenovi's avatar
mazenovi committed
348

mazenovi's avatar
mazenovi committed
349
## Revocation reason
mazenovi's avatar
mazenovi committed
350

mazenovi's avatar
mazenovi committed
351
352
353
354
355
356
357
358
359
360
* 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
361
362


mazenovi's avatar
mazenovi committed
363
364
365
#### Online Certificate Status Protocol (OCSP)

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

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

mazenovi's avatar
mazenovi committed
369
370
371
372
373
374
* si l'OCSP n'est pas disponible pour le certificat firefox accepte le certificat
  * s'il est valide


#### Online Certificate Status Protocol (OCSP)

mazenovi's avatar
mazenovi committed
375
* peu déployé
mazenovi's avatar
mazenovi committed
376
377
* [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
378
379


mazenovi's avatar
mazenovi committed
380
## <strike>SSL</strike> / TLS
mazenovi's avatar
mazenovi committed
381
382

* Crée un canal de communication **authentifié**, protégé en **confidentialité** et en **intégrité**
mazenovi's avatar
mazenovi committed
383
384
* Utilise des certificats X.509
  * délivrés par des CA
mazenovi's avatar
mazenovi committed
385
* Utilise un système de chiffrement asymétrique
mazenovi's avatar
mazenovi committed
386
387
388
  * 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
389

mazenovi's avatar
mazenovi committed
390

mazenovi's avatar
mazenovi committed
391
## TLS dans le modèle TCP/IP
mazenovi's avatar
mazenovi committed
392

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

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

mazenovi's avatar
mazenovi committed
397

mazenovi's avatar
mazenovi committed
398
399
400
401
402
403
404
## 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
405
406


mazenovi's avatar
mazenovi committed
407
## Versions TLS
mazenovi's avatar
mazenovi committed
408

mazenovi's avatar
mazenovi committed
409
Transport Layer Security
mazenovi's avatar
mazenovi committed
410

mazenovi's avatar
mazenovi committed
411
412
413
414
* **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
415
416


mazenovi's avatar
mazenovi committed
417
418
419
420
## Connexion SSL/TLS (1)

Le serveur

mazenovi's avatar
mazenovi committed
421
  * Envoie son certificat au client
mazenovi's avatar
mazenovi committed
422
423
424
425
426
427


## Connexion SSL/TLS (2)

Le client

mazenovi's avatar
mazenovi committed
428
  * Reçoit un certificat
mazenovi's avatar
mazenovi committed
429
430
431
432
433
434
435
436
437
438
439
440
  * Vérifie sa validité (domaine, date, émetteur, révocation?)
  * Génère une clé de chiffrement symétrique (**secret partagé**)
  * Chiffre le **secret partagé** avec la clé publique du serveur
  * Envoie le **secret partagé** chiffré au serveur (ClientKeyExchange)


## Connexion SSL/TLS (3)

Le serveur

  * Reçoit le **secret partagé** chiffré généré par le client
  * Déchiffre le **secret partagé** avec sa clé privée
mazenovi's avatar
mazenovi committed
441

mazenovi's avatar
mazenovi committed
442
<br>
mazenovi's avatar
mazenovi committed
443

mazenovi's avatar
mazenovi committed
444
445
446
447
#### La suite de la communication est chiffrée symétriquement


## Connexion SSL/TLS
mazenovi's avatar
mazenovi committed
448

mazenovi's avatar
mazenovi committed
449
450
451
* 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
452

mazenovi's avatar
mazenovi committed
453
454
* Les paramètres de chiffrements
  * sont négociés et « jetables »
mazenovi's avatar
mazenovi committed
455

mazenovi's avatar
mazenovi committed
456

mazenovi's avatar
mazenovi committed
457
## Certificats clients
mazenovi's avatar
mazenovi committed
458

mazenovi's avatar
mazenovi committed
459
460
461
* 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
mazenovi's avatar
mazenovi committed
462
* 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
463
464


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

mazenovi's avatar
mazenovi committed
467
Suite cryptographique
mazenovi's avatar
mazenovi committed
468

mazenovi's avatar
mazenovi committed
469
470
471
472
* é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
473

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

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


mazenovi's avatar
mazenovi committed
479
## ex: TLS_RSA_WITH_RC4_128_MD5
mazenovi's avatar
mazenovi committed
480

mazenovi's avatar
mazenovi committed
481
  Se lit
mazenovi's avatar
mazenovi committed
482
483
484

* [RSA](https://fr.wikipedia.org/wiki/Chiffrement_RSA)
  * authentification du serveur
mazenovi's avatar
mazenovi committed
485
* RC4_128 = algorithme de chiffrement [RC4](https://fr.wikipedia.org/wiki/RC4) avec clé de 128 bits
mazenovi's avatar
mazenovi committed
486
487
488
489
490
  * 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
491
## Handshake
mazenovi's avatar
mazenovi committed
492

mazenovi's avatar
mazenovi committed
493
[Comprendre le SSL/TLS: Partie 4 Handshake Protocol](https://blog.eleven-labs.com/fr/comprendre-le-ssltls-partie-4-handshake-protocol/)
mazenovi's avatar
mazenovi committed
494

mazenovi's avatar
mazenovi committed
495
<br>
mazenovi's avatar
mazenovi committed
496

mazenovi's avatar
mazenovi committed
497
(*[Déroulement des échanges ssl en détail](https://www.securiteinfo.com/cryptographie/ssl.shtml)*)
mazenovi's avatar
mazenovi committed
498

mazenovi's avatar
mazenovi committed
499

mazenovi's avatar
mazenovi committed
500
![TLS Handshake](images/ssl/TLS-Handshake.png "SSLv2 Handshake")
mazenovi's avatar
mazenovi committed
501
502


mazenovi's avatar
mazenovi committed
503
#### Négociation de la cipher suite
mazenovi's avatar
mazenovi committed
504

mazenovi's avatar
mazenovi committed
505
506
507
508
509
* Tous les serveurs web ne négocient pas les cypher suites de la même façon
  * 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
    * permet une baisse du niveau de sécurité
    *  *SSLHonorCipherOrder* pour sécuriser
mazenovi's avatar
mazenovi committed
510

mazenovi's avatar
mazenovi committed
511
512
[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
513
514


mazenovi's avatar
mazenovi committed
515
516
## Vulnérabilité TLS_RSA_WITH_RC4_128_MD5

mazenovi's avatar
mazenovi committed
517
* si la clé privée du serveur est récupérée
mazenovi's avatar
mazenovi committed
518
  * le **secret partagé** est récupérable
mazenovi's avatar
mazenovi committed
519
520
521
522
523
524
    * on peut obtenir les clés de session
      * toutes les communications sont alors déchiffrables
        * passées
        * futures


mazenovi's avatar
mazenovi committed
525
## Perfect Forward Secrecy (PFS)
mazenovi's avatar
mazenovi committed
526

mazenovi's avatar
mazenovi committed
527
*Confidentialité Persistante*
mazenovi's avatar
mazenovi committed
528

mazenovi's avatar
mazenovi committed
529
530
531
* 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)
mazenovi's avatar
mazenovi committed
532
533


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


mazenovi's avatar
mazenovi committed
537
<!-- !!!! -->
mazenovi's avatar
mazenovi committed
538
539
## Handshake - SSLv2

mazenovi's avatar
mazenovi committed
540
![SSLv2 Handshake](images/ssl/SSLv2-Handshake.png "SSLv2 Handshake")
mazenovi's avatar
mazenovi committed
541
542
543
544
545
546
547

* Il n'y a pas de message **finished**
  * **finished** protège l'échange en intégrité


## Handshake - SSLv2 - MIM

mazenovi's avatar
mazenovi committed
548
![SSLv2 Handshake](images/ssl/SSLv2-MIM-Handshake.png "SSLv2 Handshake")
mazenovi's avatar
mazenovi committed
549
550
551
552
553
554

Note:
- attaque man in the middle permet de faire baisser la sécurité des méthodes supportés par le client ou le serveur
  - pas de déchiffrement à la volée
  - mais possible avec un peu de temps
- SSLv2 est aussi vulnérable parce que
mazenovi's avatar
mazenovi committed
555
556
  - utilise MD5 dans toutes ses ciphersuites
  - utilise la même clé pour protéger le flux en intégrité et en confidentialité
mazenovi's avatar
mazenovi committed
557
558
  - pas de mécanisme de signalement de fin de connexion
    - attaques par "troncature" du flux
mazenovi's avatar
mazenovi committed
559
- SSLv2 ne doit pas être utilisé --
mazenovi's avatar
mazenovi committed
560
561
562
563
564


## Renégociation sécurisée

* en cas de
mazenovi's avatar
mazenovi committed
565
566
  * rafraîchissement des clés
    * à l'initiative du client ou du serveur
mazenovi's avatar
mazenovi committed
567
  * en cas d'authentification du client
mazenovi's avatar
mazenovi committed
568
    * authentification d'une partie protégée
mazenovi's avatar
mazenovi committed
569

mazenovi's avatar
mazenovi committed
570
le serveur initie une renégociation
mazenovi's avatar
mazenovi committed
571
572


mazenovi's avatar
mazenovi committed
573
[![TLS Renégociation](images/ssl/TLS-Renegociation.png "TLS Renégociation")<!-- .element style="width: 85%" -->](images/ssl/TLS-Renegociation.png)
mazenovi's avatar
mazenovi committed
574
575


mazenovi's avatar
mazenovi committed
576
577
![TLS Renégociation man in the middle](images/ssl/TLS-MIM-Renegociation.png "TLS Renégociation man in the middle")<!-- .element style="width: 75%" -->
<!-- !!!! -->
mazenovi's avatar
mazenovi committed
578

mazenovi's avatar
mazenovi committed
579

mazenovi's avatar
mazenovi committed
580
581
582
583
584
585
586
587
588
## 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
589
590
591
592
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
593
594
595
596
597
598
599
600
601


## 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
602
603
604
605
606
607
608
609
610
611
## 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
612
613
614

## Apache

mazenovi's avatar
mazenovi committed
615
616
617
618
619
620
621
622
623
* __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
624
  * mais on voit l'ip de l'hôte
mazenovi's avatar
mazenovi committed
625
* Proxy https ou VPN anonymisent complètement le traffic
mazenovi's avatar
mazenovi committed
626
627
628
629
630
631
632
633
634

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
635
## Vulnérabilités multiples
mazenovi's avatar
mazenovi committed
636

mazenovi's avatar
mazenovi committed
637
638
639
640
641
642
643
644
645
646
647
648
649
650
* [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
651
* [Public Key Infrastructure (PKI)](https://fr.wikipedia.org/wiki/Infrastructure_%C3%A0_cl%C3%A9s_publiques)
mazenovi's avatar
mazenovi committed
652
  * [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
653
654


mazenovi's avatar
mazenovi committed
655
## <i class="fa fa-gears"></i> Tests serveurs
mazenovi's avatar
mazenovi committed
656
657

* Tester un certificat SSL
mazenovi's avatar
mazenovi committed
658
659
  * [SSL Decoder](https://ssldecoder.org/)
  * [Certificate Expiry Monitor](https://certificatemonitor.org/)
mazenovi's avatar
mazenovi committed
660
661
662
* Tester une configuration SSL
  * [Qualys](https://www.ssllabs.com/ssltest/)
  * [Comodo ssl analyzer](https://sslanalyzer.comodoca.com/)
mazenovi's avatar
mazenovi committed
663
664
665
666
667
668
669
670
671
672
673
  * [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)


## <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
674
675
676
677
678
679
680
681
682

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
683
684
685
686
* 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
687
688
689
690
691
* Seules les implémentations conformes à TLSv1 et supérieures doivent être employées
* Les cyphersuites offrant la PFS doivent être favorisées
* [Anssi - SSL/TLS: état des lieux et recommandations](www.ssi.gouv.fr/.../SSL_TLS_etat_des_lieux_et_recommandations.pdf)


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

mazenovi's avatar
mazenovi committed
694
695
696
697
* [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
698
699


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

mazenovi's avatar
mazenovi committed
702
703
* [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
704
705


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

mazenovi's avatar
mazenovi committed
708
709
* [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
710

mazenovi's avatar
mazenovi committed
711
712
713
714
715
716
717
* fixer le [weak Diffie-Hellmani (aka logjam Attack](https://weakdh.org/))
  <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
718

mazenovi's avatar
mazenovi committed
719
720
721
722
723
724
725
726
* [Comprendre SSL/TLS - 1](https://blog.eleven-labs.com/fr/comprendre-ssl-tls-partie-1/)
* [Comprendre SSL/TLS - 2](https://blog.eleven-labs.com/fr/comprendre-ssl-tls-partie-2-chiffrement/)
* [Comprendre SSL/TLS - 3](https://blog.eleven-labs.com/fr/comprendre-le-ssltls-partie-3-certificats/)
* [Comprendre SSL/TLS - 4](https://blog.eleven-labs.com/fr/comprendre-le-ssltls-partie-4-handshake-protocol/)
* [Comprendre SSL/TLS - 5](https://blog.eleven-labs.com/fr/comprendre-ssl-tls-partie-5-record-protocol/)
* [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/)
* http://www.cypherpunks.to/~peter/T2a_X509_Certs.pdf