Impossible d'installer des plugins

Bonjour,

j’ai deux instances privées (non exposées sur Internet) dans ma société et je n’ai pas le même comportement sur les deux instances.

Les deux instances sont capables de sortir sur internet sans problème.

Quand je suis dans l’interface d’admin de l’instance principale, je n’arrive pas à télécharger de plugins.

j’ai le message suivant dans les logs :

janv. 15 16:09:27 vxxx peertube[503702]: [videos.grsea.priv:443] 2021-01-15 16:09:27.240 error: Cannot list available plugins from index https://packages.joinpeertube.org/api/v1/plugins. {
janv. 15 16:09:27 vxxx peertube[503702]: « err »: {
janv. 15 16:09:27 vxxx peertube[503702]: « stack »: « Error: unable to get local issuer certificate\n at TLSSocket.onConnectSecure (_tls_wrap.js:1088:34)\n at TLSSocket.emit (events.js:198:13)\n at TLSSocket._finishInit (_tls_wrap.js:666:8) »,
janv. 15 16:09:27 vxxx peertube[503702]: « message »: « unable to get local issuer certificate »,
janv. 15 16:09:27 vxxx peertube[503702]: « code »: « UNABLE_TO_GET_ISSUER_CERT_LOCALLY »
janv. 15 16:09:27 vxxx peertube[503702]: }
janv. 15 16:09:27 vxxx peertube[503702]: }

Quand j’essaye en CLI (avec wget) de récupérer le fichier, je n’ai pas d’incident.

Sur la seconde instance, qui a les mêmes droits sur le réseau, je n’ai pas d’incidents.

Si quelqu’un a une idée, je suis preneur, là je sèche.

Le serveur est-il à la bonne date et la bonne heure ?
Je vois l’erreur UNABLE_TO_GET_ISSUER_CERT_LOCALLY. Ça indique qu’il y a un problème de certificat sur packages.joinpeertube.org. Je n’en vois pas de mon coté. Par expérience, quand une machine n’arrive pas à valider un certificat, c’est souvent un problème d’horloge.
Vérifier qu’elle est à la bonne date, et vérifier qu’un service NTP tourne correctement est un bon réflexe.

edit : les logs semblent dire qu’il est à la bonne date. Ça ne doit pas être ça.

Les serveurs sont sur un réseau privé. Y-a-t’il un proxy pour accéder à l’extérieur ? Remplace-t-il les certificats https ? Si oui, il doit manquer les certificats internes sur la machine.

Ou peut-être faut-il configurer node pour qu’il accepte ce genre de certificat. Peut-être y-a-t’il des infos ici : https://stackoverflow.com/questions/45884752/npm-err-code-unable-to-get-issuer-cert-locally

Merci pour tes réponses, j’ai effectivement pensé à l’histoire du proxy, mais ces serveurs n’en utilisent pas pour sortir sur internet. Le plus frustrant c’est que le serveur jumeau (tests / pré production) parvient parfaitement à télécharger les plugins.

Un wget en cli n’indique pas de soucis de certificats, ce qui est encore plus étrange.

Bonjour,

Vous êtes sûr et certain que cette machine ne passe pas par un proxy ? Peut-être vérifier la tête du certificat présenté via curl -v

Merci pour votre réponse. Oui je suis certain quela machine ne passe pas par un proxy, je suis aussi l’admin Firewall :slight_smile:

Voici le résultat du curl -v :

[root@vxxxx ~]# curl -v https://packages.joinpeertube.org

  • Rebuilt URL to: https://packages.joinpeertube.org/
  • Trying 178.63.240.150…
  • TCP_NODELAY set
  • Connected to packages.joinpeertube.org (178.63.240.150) port 443 (#0)
  • ALPN, offering h2
  • ALPN, offering http/1.1
  • successfully set certificate verify locations:
  • CAfile: /etc/pki/tls/certs/ca-bundle.crt
    CApath: none
  • TLSv1.3 (OUT), TLS handshake, Client hello (1):
  • TLSv1.3 (IN), TLS handshake, Server hello (2):
  • TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
  • TLSv1.3 (OUT), TLS handshake, Client hello (1):
  • TLSv1.3 (IN), TLS handshake, Server hello (2):
  • TLSv1.3 (IN), TLS handshake, [no content] (0):
  • TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
  • TLSv1.3 (IN), TLS handshake, [no content] (0):
  • TLSv1.3 (IN), TLS handshake, Certificate (11):
  • TLSv1.3 (IN), TLS handshake, [no content] (0):
  • TLSv1.3 (IN), TLS handshake, CERT verify (15):
  • TLSv1.3 (IN), TLS handshake, [no content] (0):
  • TLSv1.3 (IN), TLS handshake, Finished (20):
  • TLSv1.3 (OUT), TLS handshake, [no content] (0):
  • TLSv1.3 (OUT), TLS handshake, Finished (20):
  • SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
  • ALPN, server accepted to use h2
  • Server certificate:
  • subject: CN=package.joinpeertube.org
  • start date: Jan 9 10:17:37 2021 GMT
  • expire date: Apr 9 10:17:37 2021 GMT
  • subjectAltName: host « packages.joinpeertube.org » matched cert’s « packages.joinpeertube.org »
  • issuer: C=US; O=Let’s Encrypt; CN=R3
  • SSL certificate verify ok.
  • Using HTTP2, server supports multi-use
  • Connection state changed (HTTP/2 confirmed)
  • Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
  • TLSv1.3 (OUT), TLS app data, [no content] (0):
  • TLSv1.3 (OUT), TLS app data, [no content] (0):
  • TLSv1.3 (OUT), TLS app data, [no content] (0):
  • Using Stream ID: 1 (easy handle 0x56450c120740)
  • TLSv1.3 (OUT), TLS app data, [no content] (0):

GET / HTTP/2
Host: packages.joinpeertube.org
User-Agent: curl/7.61.1
Accept: /

  • TLSv1.3 (IN), TLS handshake, [no content] (0):
  • TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
  • TLSv1.3 (IN), TLS handshake, [no content] (0):
  • TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
  • TLSv1.3 (IN), TLS app data, [no content] (0):
  • Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
  • TLSv1.3 (OUT), TLS app data, [no content] (0):
  • TLSv1.3 (IN), TLS app data, [no content] (0):
    < HTTP/2 404
    < server: nginx/1.14.2
    < date: Mon, 18 Jan 2021 07:52:13 GMT
    < x-powered-by: Express
    < access-control-allow-origin: *
    <
  • Connection #0 to host packages.joinpeertube.org left intact

EDIT : d’ailleurs, j’ai plongé dans les logs firewall pour vérifier si il y’avait du trafic droppé, mais non.

Je crois que Lets Encrypt a changé son certificat intermédiaire il y’a peu de temps, je me demande si ça ne pourrait pas venir de là ? Mais je ne sais pas où sont stockés les certificats utilisés par Peertube.

Normalement peertube devrait utiliser les mêmes certificats que ceux fournis par le système.

Pour debugguer, pourrais-tu essayer https://github.com/dyaa/ssl-checker ?

mkdir test
cd test
npm install ssl-checker
node

Et dans le shell node :

const sslChecker = require('ssl-checker')
sslChecker("packages.joinpeertube.org", { method: "GET", port: 443 }).then(console.info);

En fait, j’ai trouvé : les droits sur les fichiers ca-bundle dans /etc/pki/tls/certs avaient sautés et ces fichiers n’étaient pas lisible par l’utilisateur Peertube.

Après remise des droits en 644 et relance de Peertube, je peux installer le plugin que je voulais installer.

PS : je vais bientôt faire un REX pour un live de 600 utilisateurs, on s’est servi de Peertube dans ma boite pour streamer les voeux du DG pour tous les salariés.

Ce serait super merci :+1: