Acabei de configurar e começar a testar um servidor Discourse e, até agora, está ótimo. Estou com um problema em que o onebox falha devido ao que acredito ser um filtro de inspeção SSL que não consegue ser verificado pelo gem excon. Baixei o certificado raiz personalizado e o adicionei em /etc/ssl/certs no host, e até mesmo dentro do container (para teste), sem sucesso. Ainda recebo o erro abaixo em /log/rails/production.log sempre que coloco uma URL para incorporação.
Falha ao onebox [youtube url] SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate) (OpenSSL::SSL::SSLError) Não foi possível verificar o certificado.
Menciona a necessidade de alterar os padrões do excon para apontar para um ssl_path diferente, mas não tenho certeza de como fazer isso com segurança e ainda permitir que o Discourse atualize. Alguém pode me orientar sobre como garantir que um certificado raiz personalizado seja considerado válido dentro do excon? Existe algum comando rails -r exec que eu possa colocar no app.yml?
Parece que, por padrão, o excon inclui seu próprio pacote de certificados, mas como outras pessoas tiveram problemas semelhantes, ele adicionou a capacidade de configurá-lo no ambiente? E ele usará o do sistema se o certificado estiver configurado corretamente.
Pode ser necessário que o link hash funcione. Você pode tentar o seguinte e ver se isso resolve o problema?
faça ambos:
adicione seu certificado personalizado a /etc/ssl/certsdentro do container
Configurei a variável de ambiente e criei o hash, e agora não estou vendo mais um erro de SSL visível, mas o onebox ainda não está fazendo nada. Não sei se o Jeff tem algum conselho sobre o que eu possa estar fazendo de errado? @codinghorror.
Estou preocupado que fazer alterações dentro do container apenas seja destruído ao ser reconstruído, então não tenho certeza qual é a melhor abordagem aqui.
Pode ser que ele tenha armazenado em cache a falha, mas vamos testar uma coisa de cada vez.
Você não deve precisar adicionar a variável de ambiente, mas pode verificar se a adição do certificado funcionou fazendo, por exemplo:
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'
Se você obtiver um resultado (e não obtivesse antes), isso significa que o certificado está instalado corretamente. Em seguida, você pode adicionar comandos à definição do contêiner para instalar esse certificado a cada reconstrução, para que ele persista.
Obrigado, Michael. O comando do console do Rails funcionou perfeitamente; ele conseguiu baixar o arquivo JSON que você vinculou.
Não tenho certeza se isso não funcionaria anteriormente, mas eu havia instalado anteriormente o certificado raiz em /etc/ssl/certs/ e ainda assim não estava funcionando.
Executei export SSL_CERT_DIR=“/etc/ssl/certs/” no contêiner e o erro de SSL parece ter desaparecido após isso. Pelo menos, não estou mais vendo nada no production.log.
Na verdade, acho que consegui resolver o problema agora. É um prompt de autenticação com o filtro corporativo, acredito. Fiz o Net::HTTP.get no console usando uma URI oembed do YouTube para recuperar o JSON incorporado, mas, em vez disso, recebi de volta um documento HTML de autenticação. Então, acho que é isso que está atrapalhando agora. Muito obrigado, Michael.
Você também criou o link simbólico? Essa é uma parte muito importante.
Para deixar o certificado permanentemente em vigor, você deve editar o arquivo app.yml, adicionando ou modificando uma seção hooks para algo como o seguinte: