Je viens de configurer et de commencer à tester un serveur Discourse, et jusqu’à présent, tout se passe très bien. Cependant, je rencontre un problème : OneBox ne fonctionne pas, probablement à cause d’un filtre d’inspection SSL qui échoue à la vérification avec le gem excon. J’ai téléchargé le certificat racine personnalisé et l’ai ajouté à /etc/ssl/certs sur l’hôte, et même à l’intérieur du conteneur (pour tester), mais sans succès. Je reçois toujours l’erreur suivante dans /log/rails/production.log à chaque fois que je colle une URL pour l’intégration :
Échec de OneBox [url youtube] SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate) (OpenSSL::SSL::SSLError) Impossible de vérifier le certificat.
Il est mentionné de modifier les paramètres par défaut d’excon pour pointer vers un autre chemin SSL, mais je ne suis pas sûr de savoir comment le faire en toute sécurité tout en permettant à Discourse de se mettre à jour. Quelqu’un pourrait-il me conseiller sur la manière de faire en sorte qu’un certificat racine personnalisé soit reconnu comme valide par excon ? Existe-t-il une commande rails -r exec que je pourrais ajouter dans app.yml ?
Il semble que par défaut excon inclue son propre bundle de certificats, mais comme d’autres personnes ont rencontré des problèmes similaires, il a ajouté la possibilité de le configurer via l’environnement ? Et il utilisera celui du système si le certificat est correctement installé.
Il se peut que le lien avec hachage soit nécessaire pour que cela fonctionne. Pouvez-vous essayer ce qui suit et voir si cela résout le problème ?
Faites les deux :
ajoutez votre certificat personnalisé dans /etc/ssl/certsà l’intérieur du conteneur
J’ai défini la variable d’environnement et créé le hachage. Je ne vois plus d’erreur SSL visible, mais Onebox ne fait toujours rien. Je ne sais pas si Jeff a des conseils sur ce que je pourrais faire de mal ? @codinghorror.
Je m’inquiète du fait que les modifications apportées à l’intérieur du conteneur seront simplement détruites lors d’une reconstruction, donc je ne suis pas sûr de la meilleure approche à adopter ici.
Il est possible qu’il ait mis en cache l’échec, mais testons une chose à la fois.
Vous n’avez normalement pas besoin d’ajouter la variable d’environnement, mais vous pouvez vérifier si l’ajout du certificat a fonctionné en effectuant, par exemple :
root:~# /var/discourse/launcher enter app
root@app:/var/www/discourse# rails console
[1] pry(main)>
Net::HTTP.get URI 'https://meta.discourse.org/about.json'
Si vous obtenez un résultat (et que vous n’en aviez pas auparavant), cela signifie que le certificat est correctement installé. Vous pouvez ensuite ajouter des commandes à la définition du conteneur pour installer ce certificat à chaque reconstruction, afin qu’il persiste.
Merci Michael, la commande rails console a fonctionné sans problème ; elle parvient à télécharger le fichier JSON que vous avez lié.
Je ne sais pas si cela n’aurait pas fonctionné auparavant, mais j’avais précédemment installé le certificat racine dans /etc/ssl/certs/ et cela ne fonctionnait toujours pas.
J’ai exécuté export SSL_CERT_DIR=“/etc/ssl/certs/” dans le conteneur et l’erreur SSL semble avoir disparu après cela. Du moins, je ne vois plus rien dans production.log.
En fait, je pense avoir résolu le problème. Il s’agit probablement d’une invite d’authentification liée au filtre de l’entreprise. J’ai exécuté Net::HTTP.get dans la console en utilisant une URI oembed de YouTube pour récupérer le JSON d’intégration, mais cela m’a renvoyé un document HTML d’authentification. Je pense donc que c’est ce qui bloque actuellement. Merci beaucoup, Michael.
Avez-vous également créé le lien symbolique ? C’est une partie très importante.
Pour que le certificat soit placé de manière permanente, vous devez modifier le fichier app.yml en ajoutant ou en modifiant une section hooks comme suit :