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 11 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 11 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 11 ans
- Temps estimé changé de 1.50 h à 3.00 h
#4 Mis à jour par Bruno Boiget il y a environ 11 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 11 ans
- Description mis à jour (diff)
#6 Mis à jour par Joël Cuissinat il y a environ 11 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 11 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 presque 11 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 presque 11 ans
- Fichier check_certs-UnicodeEncodeError.patch Voir ajouté
#10 Mis à jour par Daniel Dehennin il y a presque 11 ans
- Assigné à mis à Bruno Boiget
#11 Mis à jour par Daniel Dehennin il y a presque 11 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