Tâche #9142
Scénario #10816: Etude de l'intégration des certificats wildcard dans les services EOLE
integration certificat wildcard pour sso
Description
Bonjour,
Serait il possible d'integrer la prise en compte des certificats type *..ac-versailles.fr sur le sso
Nous avons fait les tests avec Bruno et cela à l'air de fonctionner en modifiant le fichier /usr/share/sso/cas_resources.py
Merci d'avance
N.B : le test effectué consiste à modifier le test dans eole-sso pour accepter un établissement particulier (valide que le problème vient bien de la vérification du nom d'hôte par rapport au certificat).
* éditer le fichier /usr/share/sso/cas_resources.py dans la fonction proxy_cert_ok remplacer: if service_host not in ctx.peer_cert_data['subject']: par: if service_host not in ctx.peer_cert_data['subject'] and service_host != "<nom_host>": (par exemple, <nom_host> = ecole-0951610j.ac-versailles.fr) * service eole-sso restart
Révisions associées
Implémentation des wildcards pour les certificats SSO (ref #9142 @4h)
check_certs.py : gestion des certificats wildcard
ref #9142 @30m
Correction d'une erreur introduite dans check_certs.py
ref #9142 @15m
Historique
#1 Mis à jour par Benjamin Bohard il y a environ 9 ans
- Distribution changé de EOLE 2.3 à Toutes
Il y a quelques préconisations dans ce domaines on dirait :
https://tools.ietf.org/html/rfc6125#section-6.4.3
- on ne devrait pas valider un certificat si le wildcard et entre 2 points (foo.*.baz),
- on ne devrait valider qu'un niveau : le wildcard ne devrait pas se substituer à plus d'un niveau (*.baz valide bar.baz mais ni foo.bar.baz ni baz),
- le wildcard peut être à l'intérieur d'une étiquette (ba*, *oo, b*r) mais ne devrait pas se trouver dans une étiquette de type A ou U d'un nom de domaine internationalisé.
#2 Mis à jour par Bruno Boiget il y a environ 9 ans
- Tracker changé de Anomalie à Tâche
- Statut changé de Nouveau à En cours
- Assigné à mis à Lionel Morin
- Version cible mis à sprint 2015 8-10
- Temps estimé mis à 1.50 h
- Tâche parente mis à #8894
- Restant à faire (heures) mis à 0.75
#3 Mis à jour par Bruno Boiget il y a environ 9 ans
- Temps estimé changé de 1.50 h à 3.00 h
#4 Mis à jour par Bruno Boiget il y a environ 9 ans
Ne fonctionne pas correctement en l'état actuel : les applications PHP utilisant phpCAS ne semblent pas accepter le certificat avec wildcard
On peut laisser la fonction modifiée dans EoleSSO, elle ne semble pas poser problème (tout fonctionne en remettant un certificat avec le nom de machine)
EC4D .=> phpCAS::setCasServerCACert('/etc/ssl/certs/ca.crt') [class.casAuthDriver.php:153] EC4D .<= '' EC4D .=> phpCAS::setFixedServiceURL('https://scribe.ac-test.fr/ajaxplorer/') [class.casAuthDriver.php:161] EC4D .<= '' EC4D .=> phpCAS::isAuthenticated() [class.casAuthDriver.php:164] EC4D .| => CAS_Client::isAuthenticated() [CAS.php:1151] EC4D .| | => CAS_Client::_wasPreviouslyAuthenticated() [Client.php:1189] EC4D .| | | neither user nor PGT found [Client.php:1355] EC4D .| | <= false EC4D .| | CAS 2.0 ticket `ST-scribe.ac-test.fr-db4b6ce3ce0b12e2e2cda51960f6381b34ecbf205dc2472b2bed0a7f' is present [Client.php:1223] EC4D .| | => CAS_Client::validateCAS20('', NULL, NULL) [Client.php:1224] EC4D .| | | [Client.php:2747] EC4D .| | | => CAS_Client::getServerServiceValidateURL() [Client.php:2753] EC4D .| | | | => CAS_Client::getURL() [Client.php:417] EC4D .| | | | <= 'https://scribe.ac-test.fr/ajaxplorer/' EC4D .| | | <= 'https://scribe.ac-test.fr:8443/serviceValidate?service=https%3A%2F%2Fscribe.ac-test.fr%2Fajaxplorer%2F' EC4D .| | | => CAS_Client::_readURL('https://scribe.ac-test.fr:8443/serviceValidate?service=https%3A%2F%2Fscribe.ac-test.fr%2Fajaxplorer%2F&ticket=ST-scribe.ac-test.fr-db4b6ce3ce0b12e2e2cda51960f6381b34ecbf205dc2472b2bed0a7f&pgtUrl=https%3A%2F%2Fscribe.ac-test.fr%2Fajaxplorer%2F', NULL, NULL, NULL) [Client.php:2762] EC4D .| | | | => CAS_Request_CurlRequest::sendRequest() [AbstractRequest.php:220] EC4D .| | | | | CURL: Set CURLOPT_CAINFO /etc/ssl/certs/ca.crt [CurlRequest.php:127] EC4D .| | | | | curl_exec() failed [CurlRequest.php:77] EC4D .| | | | <= false EC4D .| | | <= false EC4D .| | | could not open URL 'https://scribe.ac-test.fr:8443/serviceValidate?service=https%3A%2F%2Fscribe.ac-test.fr%2Fajaxplorer%2F&ticket=ST-scribe.ac-test.fr-db4b6ce3ce0b12e2e2cda51960f6381b34ecbf205dc2472b2bed0a7f&pgtUrl=https%3A%2F%2Fscribe.ac-test.fr%2Fajaxplorer%2F' to validate (CURL error #51: SSL peer certificate or SSH remote key was not OK) [Client.php:2763] EC4D .| | | => CAS_AuthenticationException::__construct(EoleCASClient, 'Ticket not validated', 'https://scribe.ac-test.fr:8443/serviceValidate?service=https%3A%2F%2Fscribe.ac-test.fr%2Fajaxplorer%2F&ticket=ST-scribe.ac-test.fr-db4b6ce3ce0b12e2e2cda51960f6381b34ecbf205dc2472b2bed0a7f&pgtUrl=https%3A%2F%2Fscribe.ac-test.fr%2Fajaxplorer%2F', true) [Client.php:2767] EC4D .| | | | => CAS_Client::getURL() [AuthenticationException.php:76] EC4D .| | | | <= 'https://scribe.ac-test.fr/ajaxplorer/' EC4D .| | | | CAS URL: https://scribe.ac-test.fr:8443/serviceValidate?service=https%3A%2F%2Fscribe.ac-test.fr%2Fajaxplorer%2F&ticket=ST-scribe.ac-test.fr-db4b6ce3ce0b12e2e2cda51960f6381b34ecbf205dc2472b2bed0a7f&pgtUrl=https%3A%2F%2Fscribe.ac-test.fr%2Fajaxplorer%2F [AuthenticationException.php:79] EC4D .| | | | Authentication failure: Ticket not validated [AuthenticationException.php:80] EC4D .| | | | Reason: no response from the CAS server [AuthenticationException.php:82] EC4D .| | | | exit()
#5 Mis à jour par Bruno Boiget il y a environ 9 ans
- Description mis à jour (diff)
#6 Mis à jour par Joël Cuissinat il y a environ 9 ans
- Assigné à
Lionel Morinsupprimé - Temps estimé changé de 3.00 h à 6.00 h
- Tâche parente changé de #8894 à #10816
#7 Mis à jour par Joël Cuissinat il y a environ 9 ans
- Temps estimé changé de 6.00 h à 10.00 h
- Restant à faire (heures) changé de 0.75 à 5.0
#8 Mis à jour par Benjamin Bohard il y a environ 9 ans
Le même problème n'est-il pas présent dans la fonction run_check() (fichier check_cert.py) ?
for addr in test_addrs: if not addr in client_ctx.peer_cert_data['subject']: addr_err.append(addr) res_verify = False if len(addr_err) > 0: print_orange(missing_msg % (config.CERTFILE, ", ".join(addr_err))) print warn_msg if config.CERTFILE == default_cert: print default_msg
En passant, il y a une erreur de type UnicodeDecodeError :
File "./check_certs.py", line 84, in run_check print_orange(missing_msg % (config.CERTFILE, ", ".join([str(addr) for addr in addr_err]))) UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 49: ordinal not in range(128)
#9 Mis à jour par Benjamin Bohard il y a environ 9 ans
- Fichier check_certs-UnicodeEncodeError.patch Voir ajouté
#10 Mis à jour par Daniel Dehennin il y a presque 9 ans
- Assigné à mis à Bruno Boiget
#11 Mis à jour par Daniel Dehennin il y a presque 9 ans
- Statut changé de En cours à Résolu
- % réalisé changé de 0 à 100
- Restant à faire (heures) changé de 5.0 à 0.15
Le commit a été intégré à la branche 2.3 et vient seulement d’être empaqueté.
Paquet candidat 2.3-eole108~5.gbpdedf10