Project

General

Profile

Tâche #20513

Scénario #21863: Corrections let's encrypt

letsencrypt, ead-server non accessible

Added by Vincent Febvre about 3 years ago. Updated over 2 years ago.

Status:
Reporté
Priority:
Normal
Assigned To:
Start date:
05/15/2017
Due date:
% Done:

100%

Estimated time:
3.00 h
Spent time:
Remaining (hours):
0.25

Description

Test effectué sur un Eolebase 2.6.1 à jour

Lors du choix de letsencrypt, ead-server ne démarre pas correctement

(extrait des logs ead-server)

ead-server[21012]: exceptions.IOError: [Errno 13] Permission denied: '/etc/ssl/letsencrypt/conf/live/**********/cert.pem'
ead-server[21012]: Failed to load application: [Errno 13] Permission denied: '/etc/ssl/letsencrypt/conf/live/**********/cert.pem'

Après une première analyse, les droits sur les dossiers live et archive (/etc/ssl/letsencrypt/conf/) ne sont pas corrects :

drwx------ 3 root root 4096 mai   11 15:46 archive/
drwx------ 3 root root 4096 mai   11 15:46 live/

L'ajout de +rx sur ces deux dossiers permettent d'accédé à l'EAD.

libsecure.patch View (1.28 KB) Laurent Flori, 05/22/2017 12:44 PM

eadserver.patch View (1.47 KB) Laurent Flori, 05/22/2017 12:44 PM


Related issues

Copied to eole-common - Tâche #22339: letsencrypt, ead-server non accessible Fermé 05/15/2017

History

#1 Updated by Christophe Dezé about 3 years ago

j'ai essayé de mettre un certificat letsencrypt sur un amon 2.4.2 , nginx pas de problème , par contre,effectivement, l'EAD server n'aime pas trop

root@pf-amon.cfa-44.in.ac-nantes.fr:/usr/share# ll /etc/ssl/certs/eole.crt
lrwxrwxrwx 1 root root 50 mai   22 08:47 /etc/ssl/certs/eole.crt -> /etc/letsencrypt/live/releve.cfa-en-44.fr/cert.pem
root@pf-amon.cfa-44.in.ac-nantes.fr:/usr/share# ll /etc/letsencrypt/live/releve.cfa-en-44.fr/cert.pem
lrwxrwxrwx 1 root root 43 mai   22 08:40 /etc/letsencrypt/live/releve.cfa-en-44.fr/cert.pem -> ../../archive/releve.cfa-en-44.fr/cert1.pem
root@pf-amon.cfa-44.in.ac-nantes.fr:/usr/share# ll /etc/letsencrypt/live/releve.cfa-en-44.fr/cert.pem
lrwxrwxrwx 1 root root 43 mai   22 08:40 /etc/letsencrypt/live/releve.cfa-en-44.fr/cert.pem -> ../../archive/releve.cfa-en-44.fr/cert1.pem
root@pf-amon.cfa-44.in.ac-nantes.fr:/usr/share# ll /etc/letsencrypt/archive/releve.cfa-en-44.fr/cert1.pem
-rw-r--r-- 1 root root 1838 mai   22 08:40 /etc/letsencrypt/archive/releve.cfa-en-44.fr/cert1.pem

/usr/bin/python /usr/bin/twistd -noy /usr/share/ead2/backend/eadserver.tac
Unhandled Error
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/twisted/application/app.py", line 652, in run
    runApp(config)
  File "/usr/lib/python2.7/dist-packages/twisted/scripts/twistd.py", line 23, in runApp
    _SomeApplicationRunner(config).run()
  File "/usr/lib/python2.7/dist-packages/twisted/application/app.py", line 386, in run
    self.application = self.createOrGetApplication()
  File "/usr/lib/python2.7/dist-packages/twisted/application/app.py", line 451, in createOrGetApplication
    application = getApplication(self.config, passphrase)
--- <exception caught here> ---
  File "/usr/lib/python2.7/dist-packages/twisted/application/app.py", line 462, in getApplication
    application = service.loadApplication(filename, style, passphrase)
  File "/usr/lib/python2.7/dist-packages/twisted/application/service.py", line 405, in loadApplication
    application = sob.loadValueFromFile(filename, 'application', passphrase)
  File "/usr/lib/python2.7/dist-packages/twisted/persisted/sob.py", line 210, in loadValueFromFile
    exec fileObj in d, d
  File "/usr/share/ead2/backend/eadserver.tac", line 41, in <module>
    context = ServerContextFactory()
  File "/usr/share/ead2/lib/libsecure.py", line 39, in __init__
    self.cert = crypto.load_certificate(crypto.FILETYPE_PEM, open(cert_file).read())
exceptions.IOError: [Errno 13] Permission non accordée: u'/etc/ssl/certs/eole.crt'

#2 Updated by Laurent Flori about 3 years ago

Les certificats générés pas letsencrypt sont avec des permissions 600 du coup seul root peut les lire. Pour pouvoir lancer l'EAD2 avec ce type de certificats:
il faut devenir root dans le fichier /usr/share/ead2/lib/libsecure.py plutôt que dans le fichier /usr/share/ead2/backend/lib/eadserver.py.
NB: On ne peut pas importer les fonctions _gain_privileges et _drop_privileges depeuis eadserver.py dans libsecure.py pour cause d'import circulaire.

Solution :
Déplacer les 2 fonctions ci-dessus dans libsecure et les importer dans eadserver.py
(ne pas oublier d'ajouter le 2 lignes d'import suivantes à libsecure.py)

from os import seteuid, setegid, getuid, getgid
from ead2.backend.config.config import NOBODY_UID, NOBODY_GID

J'ajoute deux patchs pour les deux fichiers.

#3 Updated by Laurent Flori about 3 years ago

Pour valider la solution précédente, j'ai passé tout /etc/ssl/certs/eole en mode 640.
On peut alors (avec les patch de la note précédente) avoir accès a l'ead2
Mais le reconfigure fait apparaitre des problèmes avec les services openldap et ejabberd:
Pour ces deux services, on ajouter un groupe sur le système, ajouter les deux utilisateurs des services précédents à ce nouveau groupe et donner à ce groupe le droit de lire /etc/ssl/certs/eole.*

addgroup eolecert
chgrp eolecert /etc/ssl/certs/eole*
adduser ejabberd eolecert
adduser openldap eolecert

Les droits des fichiers sont donc maintenant:
root@scribe:~# ls -al /etc/ssl/certs/eole.*
-rw-r----- 1 root eolecert 1476 mai   20 07:52 /etc/ssl/certs/eole.crt
-rw-r----- 1 root eolecert 1679 mai   20 07:52 /etc/ssl/certs/eole.key
-rw-r----- 1 root eolecert 3155 mai   22 16:10 /etc/ssl/certs/eole.pem

#4 Updated by Laurent Flori about 3 years ago

  • Assigned To set to Laurent Flori

#5 Updated by Emmanuel GARETTE over 2 years ago

  • Parent task set to #21863

#6 Updated by Emmanuel GARETTE over 2 years ago

J'ai fait différamment, je copie les certificats et change les droits (plus de problème de droit).

Par contre impossible de se logger sur l'EAD, il ne valide pas les certificats let's encrypt.

#7 Updated by Scrum Master over 2 years ago

  • Status changed from Nouveau to En cours

#8 Updated by Scrum Master over 2 years ago

  • Description updated (diff)
  • Assigned To changed from Laurent Flori to Emmanuel GARETTE

#9 Updated by Scrum Master over 2 years ago

  • Status changed from En cours to Résolu

#10 Updated by Joël Cuissinat over 2 years ago

  • % Done changed from 0 to 100
  • Estimated time set to 3.00 h
  • Remaining (hours) set to 0.25

#11 Updated by Gérald Schwartzmann over 2 years ago

  • Status changed from Résolu to En cours

Le certificat ne semble pas reconnu comme valide, l'EAD n'affiche pas de mire d'authentification.

update-ca-certificates permet de contourner le prb et ajoute 3 certificats

#12 Updated by Gérald Schwartzmann over 2 years ago

  • Copied to Tâche #22339: letsencrypt, ead-server non accessible added

#13 Updated by Gérald Schwartzmann over 2 years ago

  • Status changed from En cours to Ne sera pas résolu

#14 Updated by Gérald Schwartzmann over 2 years ago

  • Status changed from Ne sera pas résolu to Reporté

Also available in: Atom PDF