Code source wiki de Authentification SAMLv2 - Configuration
Modifié par jhurst le 2024/04/02 14:26
Afficher les derniers auteurs
author | version | line-number | content |
---|---|---|---|
1 | {{ddtoc/}} | ||
2 | |||
3 | = Prérequis = | ||
4 | |||
5 | |||
6 | Dans ce document on appellera : | ||
7 | |||
8 | |SP : Service Provider ou Fournisseur de services|IdP : Identity Provider ou Fournisseur d’identités | ||
9 | | | | ||
10 | |Kpr(SP) : la clé privée du SP|Kpr(IdP) : la clé privée de l’IdP | ||
11 | |Kpb(SP) : la clé publique du SP|Kpb(IdP) : la clé publique de l’IdP | ||
12 | |||
13 | ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- | ||
14 | |||
15 | |||
16 | |||
17 | Avoir à disposition les éléments suivants : | ||
18 | |||
19 | * la clé privée du SP | ||
20 | * la clé publique du SP | ||
21 | * la clé publique de l’IdP | ||
22 | * OpenSSL : un outil permettant de manipuler les objets servant à des connexions sécurisées (certificats x509, signatures, chiffrements, etc.). Il permet notamment le formatage de certificats. | ||
23 | |||
24 | (% class="box warningmessage" %) | ||
25 | ((( | ||
26 | **Important **: | ||
27 | //Si il est prévu que les deux parties (SP et IdP) signent leurs données, | ||
28 | - Il faudra notamment faire attention à ce que les certificats avec les clés publiques échangés soient certifiés par une autorité de certification (CA-signed certificate). | ||
29 | - Dans le cas de certificats auto-signés, il faudra vérifier si ces derniers sont supportés par l’une et par l’autre des parties.// | ||
30 | ))) | ||
31 | |||
32 | == Principes == | ||
33 | |||
34 | Les acteurs et les outils nécessaires pour la mise en place d’une communication sécurisée SAMLv2 (chiffrée et/ou signée) peut se résumer comme suit : | ||
35 | |||
36 | |||
37 | |||
38 | |Fournisseur de Services | ||
39 | (Service Provider SP)|Communication|Fédérateur d’identités | ||
40 | (Identity Provider IdP) | ||
41 | |Chiffre les données avec Kpb(IdP)|(% rowspan="2" %)((( | ||
42 | **>** | ||
43 | |||
44 | Le SP envoie la requête d’authentification cryptée et/ou signée à l’IdP | ||
45 | )))|Déchiffre les données avec Kpr(IdP) | ||
46 | |Signe les données avec Kpr(SP)|Valide signature avec Kpb(SP) | ||
47 | | | | | ||
48 | |Déchiffre les données avec Kpr(SP)|(% rowspan="2" %)((( | ||
49 | **<** | ||
50 | |||
51 | L’IdP envoie la réponse SAMLv2 chiffrée et/ou signée au SP | ||
52 | )))|Chiffre les données avec Kpb(SP) | ||
53 | |Valide signature avec Kpb(IdP)|Signe les données avec Kpr(IdP) | ||
54 | |||
55 | __Principe : chiffrage et signature des données échangées entre le SP et l’IdP__ | ||
56 | |||
57 | |||
58 | Le SP doit donc avoir connaissance de | ||
59 | |||
60 | - la clé privée du SP | ||
61 | |||
62 | - la clé publique du SP | ||
63 | |||
64 | - la clé publique de l’IdP | ||
65 | |||
66 | |||
67 | == Formatage des clés privées == | ||
68 | |||
69 | Onelogin requiert le format PKCS#8 pour les clés privées (le contenu de la clé doit débuter par « BEGIN PRIVATE KEY »). | ||
70 | |||
71 | Si jamais vous avez en possession une clé privée au format PKCS#1 (le contenu de la clé débute par « BEGIN RSA PRIVATE KEY »), formater celle-ci en générant une nouvelle clé privée au bon format via la commande : | ||
72 | |||
73 | openssl pkcs8 -topk8 -inform pem -nocrypt -in sp.rsa_key -outform pem -out sp.pem | ||
74 | |||
75 | |||
76 | = Récupération des clés en chaîne de caractères = | ||
77 | |||
78 | Onelogin met à disposition des outils en ligne pour récupérer les clés sous forme de chaîne de caractères sans perdre le format. | ||
79 | |||
80 | == Clé publique == | ||
81 | |||
82 | On pourra utiliser l’outil disponible via le lien suivant pour récupérer la chaîne de caractère correspondant à une clé **publique **: | ||
83 | |||
84 | [[https:~~/~~/developers.onelogin.com/saml/online-tools/x509-certs/format-x509-certificate>>url:https://developers.onelogin.com/saml/online-tools/x509-certs/format-x509-certificate]] | ||
85 | |||
86 | On veut récupérer la clé publique sous la forme suivante (**AVEC en-têtes et SANS retour chariot**) : | ||
87 | |||
88 | ~-~-~-~--BEGIN CERTIFICATE~-~-~-~--XXXXXXX~-~-~-~--END CERTIFICATE~-~-~-~-- | ||
89 | |||
90 | avec XXXXXXX le contenu de la partie « X.509 cert in string format » | ||
91 | |||
92 | [[image:1592386898235-169.png||queryString="width=467&height=531" height="531" width="467"]] | ||
93 | |||
94 | __Outil en ligne Onelogin : formatage d’un certificat x509 contenant une clé publique__ | ||
95 | |||
96 | |||
97 | == Clé privée == | ||
98 | |||
99 | On pourra utiliser l’outil disponible via le lien suivant pour récupérer la chaîne de caractère correspondant à une clé **privée**: | ||
100 | |||
101 | [[https:~~/~~/developers.onelogin.com/saml/online-tools/x509-certs/format-private-key>>url:https://developers.onelogin.com/saml/online-tools/x509-certs/format-private-key]] | ||
102 | |||
103 | On veut récupérer la clé privée sous la forme suivante (**AVEC en-têtes et SANS retour chariot**) : | ||
104 | |||
105 | ~-~-~-~--BEGIN PRIVATE KEY~-~-~-~--YYYYYYY~-~-~-~--END PRIVATE KEY~-~-~-~-- | ||
106 | |||
107 | avec YYYYYYY le contenu de la partie « Private Key in string format » | ||
108 | |||
109 | [[image:1592386741842-227.png||queryString="width=504&height=591" height="591" width="504"]] | ||
110 | |||
111 | __Outil en ligne Onelogin : formatage d’une clé privée__ | ||
112 | |||
113 | = Surcharge des propriétés dans le fichier de sécurité = | ||
114 | |||
115 | |||
116 | Dans le fichier de sécurité SAMLv2 (.properties) rajouter les propriétés suivantes : | ||
117 | |||
118 | onelogin.saml2.sp.x509cert : le certificat contenant la clé publique du SP | ||
119 | |||
120 | onelogin.saml2.sp.privatekey : la clé privée du SP | ||
121 | |||
122 | onelogin.saml2.idp.x509cert : le certificat contenant la clé publique de l’IdP | ||
123 | |||
124 | __Extrait du fichier de sécurité SAMLv2 surchargeant les propriétés concernant les clés publiques/privées__ | ||
125 | |||
126 | ((( | ||
127 | {{code language="properties"}} | ||
128 | ... | ||
129 | |||
130 | # Service Provider Data that DigDash deploys | ||
131 | |||
132 | onelogin.saml2.sp.x509cert = -----BEGIN CERTIFICATE-----XXXXXXX-----END CERTIFICATE----- | ||
133 | onelogin.saml2.sp.privatekey = -----BEGIN PRIVATE KEY-----YYYYYYY-----END PRIVATE KEY----- | ||
134 | |||
135 | |||
136 | # Identity Provider Data used to connect with DigDash (SP) | ||
137 | |||
138 | onelogin.saml2.idp.x509cert = -----BEGIN CERTIFICATE-----ZZZZZZZ-----END CERTIFICATE----- | ||
139 | |||
140 | ... | ||
141 | {{/code}} | ||
142 | |||
143 | |||
144 | ))) |