ufscar / cnpqwsproxy

OpenResty-based SOAP caching proxy for CNPq / Lattes Platform WebServices
MIT License
14 stars 5 forks source link

cnpqwsproxy e let's encrypt #1

Open b-mandelbrot opened 6 years ago

b-mandelbrot commented 6 years ago

Olá,

estou tentando instalar o proxy, porém sem sucesso. Gostaria de uma ajuda para entender os seguintes passos:

Gere uma chave privada e o certificado correspondente para o servidor TLS embutido. Você pode mudar as informações de certificado passadas ao openssl por meio da variável de ambiente TLS_CERT_SUBJ. Depois chame: make tls-conf Se você quiser usar um certificado TLS válido, assine o conf/tls/private/cnpqwsproxy.csr usando sua autoridade certificadora (AC) preferida e sobrescreva conf/tls/private/cnpqwsproxy.crt com o certificado fornecido pela AC.

Estamos usando o certbot-auto (Let's Encrypt) e não estou conseguindo fazer funcionar. Já fiz o deploy das chaves para o nginx, o domínio já está reconhecendo o ssl, porém ao rodar o suds estou recebendo um erro dizendo que o certificado é inválido.

OpenRestry está instalado!

Alguma dica?

thotypous commented 6 years ago

Olá @b-mandelbrot

Atualmente também estamos usando Let's Encrypt no serviço da UFSCar. Configuramos da seguinte forma:

/etc/letsencrypt/renewal/cnpqwsproxy.ufscar.br.conf:

# renew_before_expiry = 30 days
version = 0.10.2
archive_dir = /etc/letsencrypt/archive/cnpqwsproxy.ufscar.br
cert = /etc/letsencrypt/live/cnpqwsproxy.ufscar.br/cert.pem
privkey = /etc/letsencrypt/live/cnpqwsproxy.ufscar.br/privkey.pem
chain = /etc/letsencrypt/live/cnpqwsproxy.ufscar.br/chain.pem
fullchain = /etc/letsencrypt/live/cnpqwsproxy.ufscar.br/fullchain.pem

# Options used in the renewal process
[renewalparams]
authenticator = webroot
installer = None
account = hash_da_nossa_conta
post_hook = /etc/letsencrypt/hook.sh
[[webroot_map]]
cnpqwsproxy.ufscar.br = /var/www

Note a configuração post_hook acima.

/etc/letsencrypt/hook.sh:

#!/bin/bash -e
cp /etc/letsencrypt/live/cnpqwsproxy.ufscar.br/fullchain.pem /var/cnpqwsproxy/conf/tls/private/cnpqwsproxy.crt
cp /etc/letsencrypt/live/cnpqwsproxy.ufscar.br/privkey.pem /var/cnpqwsproxy/conf/tls/private/cnpqwsproxy.key
chown cnpqwsproxy:cnpqwsproxy /var/cnpqwsproxy/conf/tls/private/cnpqwsproxy.crt /var/cnpqwsproxy/conf/tls/private/cnpqwsproxy.key
service nginx reload
/bin/su -s /bin/sh - cnpqwsproxy /var/cnpqwsproxy/app reload

Note que estamos copiando o certificado e a chave de dentro do diretório gerenciado pelo letsencrypt para o diretório do cnpqwsproxy. Uma alternativa seria fazer links simbólicos, daí o script acima precisaria apenas recarregar os serviços. No entanto, tivemos um problema ao tentar dessa forma, agora não me lembro qual.

Note também que temos tanto o nginx comum (do repositório da distribuição) como o openresty instalados. Isso é necessário porque o letsencrypt faz a renovação usando as portas 80 e 443, nas quais é o nginx comum quem está escutando. Uma alternativa para não precisar do nginx comum seria reconfigurar o cnpqwsproxy para escutar nas portas 80/443 e mapear um webroot para renovar diretamente por ele.

b-mandelbrot commented 6 years ago

Copiei os arquivos e aparentemente ficou ok. Cadastrei o IP de acesso externo... porém estou recebendo um erro 500 do servidor.

Já o acesso localhost, está retornando um 403.

2018/07/13 12:52:40 [error] 154618#154618: *3 lua entry thread aborted: runtime error: /home/bruno/cnpqwsproxy/scripts/cnpqws_cache_key.lua:5: loop or previous error loading module 'expat'
stack traceback:
coroutine 0:
    [C]: in function 'require'
    /home/bsb/cnpqwsproxy/scripts/cnpqws_cache_key.lua:5: in function </home/bsb/cnpqwsproxy/scripts/cnpqws_cache_key.lua:1>,

Chegou a passar por algo parecido?

Obrigado!

thotypous commented 6 years ago

A linha 5 é a linha que carrega o expat: https://github.com/nitmateriais/cnpqwsproxy/blob/master/scripts/cnpqws_cache_key.lua#L5

Se está dando erro bem nessa linha, provavelmente você não está com a biblioteca expat corretamente instalada no diretório lualibs.

Você chegou a executar o comando git submodule init && git submodule update para baixar os submódulos? O expat é baixado por esse mecanismo.

b-mandelbrot commented 6 years ago

Bom o problema do 403 era o acesso não autorizado. Então adicionei o IP a lista cnpqws_allowed_clients.conf e tudo ok. Porém o error 500 ainda persiste.

Estou usando o CentOS 7. Rodei os comandos conforme README. Porém continuo recebendo o mesmo erro. Veja o diretório lualibs:

[bsb@bsb lualibs]$ ls -la
total 4
drwxrwxr-x.  3 bsb bsb   63 Jul 15 13:01 .
drwxrwxr-x. 15 bsb bsb 4096 Jul 15 13:15 ..
lrwxrwxrwx.  1 bsb bsb   17 Jul 15 13:01 expat -> ../3rdparty/expat
lrwxrwxrwx.  1 bsb bsb   16 Jul 15 13:01 glue -> ../3rdparty/glue
drwxrwxr-x.  2 bsb bsb   19 Jul 15 13:01 lua-resty-http
lrwxrwxrwx.  1 bsb bsb   14 Jul 15 13:01 pp -> ../3rdparty/pp
b-mandelbrot commented 6 years ago

@thotypous Obrigado pela ajuda. Eu uso o CentOS 7. E no meu caso foi necessário instalar no sistema as dependências:

sudo yum install expat-devel

Agora está tudo funcionando corretamente. Obrigado!

thotypous commented 6 years ago

@b-mandelbrot Que bom que deu certo! Não pensamos em colocar a instalação do expat em si (além do wrapper para Lua) nas instruções pois alguma das outras dependências já estava puxando o expat nos sistemas Debian que testamos. Obrigado pela contribuição, vamos editar as instruções para contemplar isso.

Só por curiosidade, você é de qual instituição? FGV?

b-mandelbrot commented 6 years ago

@thotypous sim FGV. Muito obrigado pela atenção.