Commit 43100586 authored by mazenovi's avatar mazenovi
Browse files

enhance ssl course

parent 7d667c6d
......@@ -50,4 +50,6 @@ On est en moyenne à 5.5 clés d’un autre utilisateur de PGP
## AndroidPG
## https://openpgpjs.org/
## enigmail
......@@ -87,15 +87,15 @@ Informations ou contraintes d'utilisation
## générer une clé RSA
```
openssl genrsa -out ca.key 4096
```bash
$ openssl genrsa -out ca.key 4096
```
* 4096 représente la taille de la clé
* ```ca.key``` contient la clé privée ET la clé publique
```
openssl rsa -in ca.key -pubout
```bash
$ openssl rsa -in ca.key -pubout
```
* Permet d'extraire la partie publique uniquement
......@@ -103,38 +103,62 @@ openssl rsa -in ca.key -pubout
## générer un certificat
```
openssl req -new -x509 -days 1826 \
```bash
$ openssl req -new -x509 -days 1826 \
-key ca.key -out ca.crt \
-subj '/CN=www.rootdom.com/O=My Root Company Name LTD./C=US'
-subj '/CN=m4z3.me'
```
```
% cat ca.crt
```bash
$ cat ca.crt
-----BEGIN CERTIFICATE-----
MIIC/zCCAeegAwIBAgIJAM4FANszQweWMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNV
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é
```
openssl x509 -text -noout -in ca.crt
```
* Issuer et Subject identiques
* 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)
......@@ -157,103 +181,128 @@ openssl x509 -purpose -in ca.crt -inform PEM
* payer (le navigateur)
## X.509 Autorité de certificaiton (CA) gratuites
## CA racine
* https://www.startcomca.com/index/support?v=1
* CACERT n'est pas une autorité de certification intégré aux navigateurs
* let's encrypt (http://formulae.isima.fr/)
https://fr.wikipedia.org/wiki/Certificat_racine
* 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;">
<img src="images/ssl/known-good-signers.png" width="80%" />
</div>
## Chaînes de certification
* 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;">
<img src="images/ssl/https-ff.png" width="80%" />
</div>
![Known good signers](images/ssl/known-good-signers.png)
## 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)
<div style="text-align: center;">
<img src="images/ssl/https-chrome.png" width="80%" />
</div>
![Warning](images/ssl/https-ff.png)
## 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
* 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
* Certificat différent du nom de domaine
* wildcard
* https://amendes.gouv.fr
* Certificats expirés
* Autorités de certification non importée
* ...
## X.509 Demande de certificat Certificate Sign Request (CSR)
## Certificate Sign Request
### (CSR)
```
openssl req -new -newkey rsa:2048 -sha256 \
```bash
$ openssl req -new -newkey rsa:2048 -sha256 \
-nodes -out user.csr -keyout user.key \
-subj '/CN=example.com'
```
```
openssl req -in user.csr -text -noout
* 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
```
vérifier le csr
* Lire le CSR
```
openssl req -text -noout -verify -in user.csr
```bash
$ openssl req -text -noout -verify -in user.csr
```
```
openssl x509 \
* Vérifier le CSR
### Création d'un certfificat à partir d'un CSR
```bash
$ openssl x509 -req -days 365 \
-CA ca.crt -CAkey ca.key \
-CAcreateserial -CAserial serial \
-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
* un CSR est auto-signé (pour vérifier l'intégrité)
* l'AC vérifie que le domaine correspond à un nom de domaine géré par le compte courant
* 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
* la CA créée le certificat, en ajoutant quelques informations et en signant avec sa clé privée
* lui il a intérêt à bien gérer ses clés pour ne pas être compromis
* en case de compromission on révoque
note:
- https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs
## X.509 vérification de la signature
```
openssl verify -CAfile ca.crt user.crt
```bash
$ openssl verify -CAfile ca.crt user.crt
user.crt: OK
```
Certificat auto-signé
* Issuer et Subject identiques
* X509v3 Subject Key Identifier = X509v3 Authority Key Identifier
* Tout le monde peut en fabriquer
* Rejeté par défaut par les navigateurs
https://stackoverflow.com/questions/25482199/verify-a-certificate-chain-using-openssl-verify
```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
......
......@@ -12,6 +12,7 @@
<!-- 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/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../main.css">
<!-- Printing and PDF exports -->
<script>
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment