Skip to content
Snippets Groups Projects
Commit 43100586 authored by mazenovi's avatar mazenovi
Browse files

enhance ssl course

parent 7d667c6d
No related branches found
No related tags found
No related merge requests found
content/slides/privacy/images/ssl/check-cert-ff.png

34.7 KiB

content/slides/privacy/images/ssl/check-cert-ff2.png

176 KiB

content/slides/privacy/images/ssl/https-chrome.png

96.8 KiB

content/slides/privacy/images/ssl/https-ff.png

32.9 KiB

content/slides/privacy/images/ssl/https.png

189 KiB

content/slides/privacy/images/ssl/known-good-signers.png

80.6 KiB

...@@ -50,4 +50,6 @@ On est en moyenne à 5.5 clés d’un autre utilisateur de PGP ...@@ -50,4 +50,6 @@ On est en moyenne à 5.5 clés d’un autre utilisateur de PGP
## AndroidPG ## AndroidPG
## https://openpgpjs.org/
## enigmail ## enigmail
...@@ -87,15 +87,15 @@ Informations ou contraintes d'utilisation ...@@ -87,15 +87,15 @@ Informations ou contraintes d'utilisation
## générer une clé RSA ## générer une clé RSA
``` ```bash
openssl genrsa -out ca.key 4096 $ openssl genrsa -out ca.key 4096
``` ```
* 4096 représente la taille de la clé * 4096 représente la taille de la clé
* ```ca.key``` contient la clé privée ET la clé publique * ```ca.key``` contient la clé privée ET la clé publique
``` ```bash
openssl rsa -in ca.key -pubout $ openssl rsa -in ca.key -pubout
``` ```
* Permet d'extraire la partie publique uniquement * Permet d'extraire la partie publique uniquement
...@@ -103,38 +103,62 @@ openssl rsa -in ca.key -pubout ...@@ -103,38 +103,62 @@ openssl rsa -in ca.key -pubout
## générer un certificat ## générer un certificat
``` ```bash
openssl req -new -x509 -days 1826 \ $ openssl req -new -x509 -days 1826 \
-key ca.key -out ca.crt \ -key ca.key -out ca.crt \
-subj '/CN=www.rootdom.com/O=My Root Company Name LTD./C=US' -subj '/CN=m4z3.me'
``` ```
``` ```bash
% cat ca.crt $ cat ca.crt
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIC/zCCAeegAwIBAgIJAM4FANszQweWMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNV MIIC/zCCAeegAwIBAgIJAM4FANszQweWMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNV
BAMMC2V4YW1wbGUuY29tMB4XDTE3MTAzMTExMzEzNFoXDTE3MTEzMDExMzEzNFow BAMMC2V4YW1wbGUuY29tMB4XDTE3MTAzMTExMzEzNFoXDTE3MTEzMDExMzEzNFow
``` ```
https://www.sslmarket.fr/ssl/help-la-difference-entre-certificats [différences entre certificats](https://www.sslmarket.fr/ssl/help-la-difference-entre-certificats)
## faire parler un certificat ## Certificat auto-signé
``` * Issuer et Subject identiques
openssl x509 -text -noout -in ca.crt * Tout le monde peut en fabriquer
``` * Rejeté par défaut par les navigateurs
```
openssl s_client -connect isima.fr -showcerts #### faire parler un certificat
local
```bash
$ openssl x509 -text -noout -in ca.crt
``` ```
Avec son navigateur en cliquant sur le cadenas distant
```bash
$ openssl s_client -connect isima.fr:443 -showcerts -servername isima.fr
``` ```
openssl x509 -purpose -in ca.crt -inform PEM
* [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
``` ```
* Permet d'obtenir obtenir les usages possibles de la clé
## faire parler un certificat
![Check CERT Firfox](images/ssl/check-cert-ff.png)
* Avec son navigateur en cliquant sur le cadenas
## faire parler un certificat
![Check CERT Firfox](images/ssl/check-cert-ff2.png)
## Autorité de certificaiton (CA) ## Autorité de certificaiton (CA)
...@@ -157,103 +181,128 @@ openssl x509 -purpose -in ca.crt -inform PEM ...@@ -157,103 +181,128 @@ openssl x509 -purpose -in ca.crt -inform PEM
* payer (le navigateur) * payer (le navigateur)
## X.509 Autorité de certificaiton (CA) gratuites ## CA racine
* https://www.startcomca.com/index/support?v=1 https://fr.wikipedia.org/wiki/Certificat_racine
* CACERT n'est pas une autorité de certification intégré aux navigateurs
* let's encrypt (http://formulae.isima.fr/)
* clés publiques non signées, ou auto-signées
* sur lesquelles repose la confiance
## known good signers * Les logiciels, comme les navigateurs web ou les clients de messagerie détiennent des certificats racines de nombreuses autorités de certification commerciales ou gouvernementales. Quand un navigateur ouvre une connexion sécurisée (TLS/SSL) vers un site possédant un certificat émis par une autorité connue, il considère le site comme sûr dans la mesure où le chemin de certification est validé. Le passage en mode sécurisé est alors transparent.
<div style="text-align: center;"> ## Chaînes de certification
<img src="images/ssl/known-good-signers.png" width="80%" />
</div> * Un certificat est rarement signé par une CA racine
* La CA racine créé plusieurs CA intermédiaires
* sous scellé / déconnecté / sorti pour générer
* auto signé
* 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
## Certificate Authority (CA) ## Known good signers
<div style="text-align: center;"> ![Known good signers](images/ssl/known-good-signers.png)
<img src="images/ssl/https-ff.png" width="80%" />
</div>
## X.509 Autorité de certificaiton (CA) 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/) de fondé par l'[EFF](https://www.eff.org/fr) et [Mozilla](https://www.mozilla.org/fr/)
## Certificate Authority (CA) ## Certificate Authority (CA)
<div style="text-align: center;"> ![Warning](images/ssl/https-ff.png)
<img src="images/ssl/https-chrome.png" width="80%" />
</div>
## CA racine ## Certificate Authority (CA)
https://fr.wikipedia.org/wiki/Certificat_racine ![Warning](images/ssl/https-chrome.png)
es certificats racines sont des clés publiques non signées, ou auto-signées, dans lesquelles repose la confiance. Les logiciels, comme les navigateurs web ou les clients de messagerie détiennent des certificats racines de nombreuses autorités de certification commerciales ou gouvernementales. Quand un navigateur ouvre une connexion sécurisée (TLS/SSL) vers un site possédant un certificat émis par une autorité connue, il considère le site comme sûr dans la mesure où le chemin de certification est validé. Le passage en mode sécurisé est alors transparent.
## Chaînes de certification ## Différentes causes
* Un certificat est rarement signé par une CA racine * Certificat différent du nom de domaine
* La CA racine créé plusieurs CA intermédiaires * wildcard
* sous scellé / déconnecté / sorti pour générer * https://amendes.gouv.fr
* auto signé * Certificats expirés
* Les CA intermédiaires signent * Autorités de certification non importée
* 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
## X.509 Demande de certificat Certificate Sign Request (CSR) ## Certificate Sign Request
### (CSR)
``` ```bash
openssl req -new -newkey rsa:2048 -sha256 \ $ openssl req -new -newkey rsa:2048 -sha256 \
-nodes -out user.csr -keyout user.key \ -nodes -out user.csr -keyout user.key \
-subj '/CN=example.com' -subj '/CN=example.com'
``` ```
``` * Générer un requête de certification
openssl req -in user.csr -text -noout * Un CSR est auto-signé (pour vérifier l'intégrité)
```bash
$ openssl req -in user.csr -text -noout
``` ```
vérifier le csr * Lire le CSR
``` ```bash
openssl req -text -noout -verify -in user.csr $ openssl req -text -noout -verify -in user.csr
``` ```
``` * Vérifier le CSR
openssl x509 \
### Création d'un certfificat à partir d'un CSR
```bash
$ openssl x509 -req -days 365 \
-CA ca.crt -CAkey ca.key \ -CA ca.crt -CAkey ca.key \
-CAcreateserial -CAserial serial \ -CAcreateserial -CAserial serial \
-in user.csr -out user.crt \ -in user.csr -out user.crt \
-req -days 365
``` ```
https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs * Génèrer un certificat à partir d'un CSR
* la CA vérifie qu'elle gère le domaine
* un CSR est auto-signé (pour vérifier l'intégrité) * la CA ajoute quelques informations
* l'AC vérifie que le domaine correspond à un nom de domaine géré par le compte courant * la CA signe avec sa clé privée
* la CA protège sa clé privée
* la CA créée le certificat, en ajoutant quelques informations et en signant avec sa clé privée note:
* lui il a intérêt à bien gérer ses clés pour ne pas être compromis - https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs
* en case de compromission on révoque
## X.509 vérification de la signature ## X.509 vérification de la signature
``` ```bash
openssl verify -CAfile ca.crt user.crt $ openssl verify -CAfile ca.crt user.crt
user.crt: OK
``` ```
Certificat auto-signé ```bash
* Issuer et Subject identiques $ openssl x509 -text -noout -in user.crt
* X509v3 Subject Key Identifier = X509v3 Authority Key Identifier Certificate:
* Tout le monde peut en fabriquer Data:
* Rejeté par défaut par les navigateurs Version: 1 (0x0)
Serial Number:
https://stackoverflow.com/questions/25482199/verify-a-certificate-chain-using-openssl-verify 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
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
<!-- Theme used for syntax highlighting of code --> <!-- Theme used for syntax highlighting of code -->
<link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css"> <link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css">
<link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css"> <link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../main.css">
<!-- Printing and PDF exports --> <!-- Printing and PDF exports -->
<script> <script>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment