Closed jamilatta closed 4 years ago
Problema de certificado ao tentar rodar a imagem e executar o update_search_preprint:
Preciso verificar com a infraestrutura, pois, ao realizar um teste com o link do https://www.python.org consegui realizar a verificação do HTTPS.
Dockerfile:
FROM alpine:3.6
RUN apk -U upgrade && \
apk -U add python ca-certificates && \
update-ca-certificates
CMD ["python", "-c", "import urllib2; response = urllib2.urlopen('https://www.python.org')"]
Realizando vários testes juntamente com a infra-estrutura verificamos que exsite URL dentro do próprio SciELO que responde de forma correta.
O que consegui entender desse erro:
No servidores de aplicação: Apache e Nginx existe uma configuração de um conjunto de algoritmos que "ajuda" as conexões seguras TLS, essas configurações são chamadas de Cipher.
Pelo que entendi a configuração desse conjunto de algoritmos pode "enfraquecer" a criptografia.
Realizamos alguns testes em python, para garantir e evidênciar o problema:
Utilizando a requests e provendo uma quantidade maior de opção de ciphers:
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.ssl_ import create_urllib3_context
CIPHERS = (
'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GC'
)
class DESAdapter(HTTPAdapter):
"""
A TransportAdapter that re-enables 3DES support in Requests.
"""
def init_poolmanager(self, *args, **kwargs):
context = create_urllib3_context(ciphers=CIPHERS)
kwargs['ssl_context'] = context
return super(DESAdapter, self).init_poolmanager(*args, **kwargs)
def proxy_manager_for(self, *args, **kwargs):
context = create_urllib3_context(ciphers=CIPHERS)
kwargs['ssl_context'] = context
return super(DESAdapter, self).proxy_manager_for(*args, **kwargs)
s = requests.Session()
s.mount('https://homolog-preprints.scielo.org', DESAdapter())
r = s.get('https://homolog-preprints.scielo.org')
print(r)
Para o endereço https://homolog-preprints.scielo.org, obtivemos o seguinte erro:
OpenSSL.SSL.Error: [('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')]
Utilizando o mesmo script alterando somente o endereço https://homolog-preprints.scielo.org para https://www.scielo.org.
Recebemos o seguinte retorno:
Um ponto observado pelo @rondinelisaad é que esse servidor de preprint esta utilizando o Apache.
Em conversa com o @rondinelisaad a estratégia é passar a utilizar o Nginx.
Cipher is the key exchange algorithm is used to exchange a key between two devices.
Mais informações sobre Cipher pode ser encontrado em: https://en.wikipedia.org/wiki/Cipher_suite
Outra forma rápida de realizar o teste (https://www.python.org):
FROM alpine:3.3
RUN apk -U upgrade && \
apk -U add python ca-certificates && \
update-ca-certificates
CMD ["python", "-c", "import urllib2; response = urllib2.urlopen('https://www.python.org')"]
https://homolog-preprints.scielo.org
FROM alpine:3.3
RUN apk -U upgrade && \
apk -U add python ca-certificates && \
update-ca-certificates
CMD ["python", "-c", "import urllib2; response = urllib2.urlopen('https://homolog-preprints.scielo.org)"]
Desde a versão 2.7.9/3.4.3 adicionou a validação do certificado.
Essa validação foi adicionada na PEP: https://www.python.org/dev/peps/pep-0476/
Essa mudança alterou os módulos (stdlib) urllib/urllib2, http, httplib.
Mais sobre essa alteração pode ser encontrado:
https://docs.python.org/2/library/httplib.html#httplib.HTTPSConnection
https://docs.python.org/3/library/http.client.html#http.client.HTTPSConnection
Realizamos a seguinte alteração:
sickle = Sickle(self.args.oai_url, verify=False)
Alteramos o comportamento padrão da urllib para não realizar a verificação dos certificados :-(.
Ao executar o script recebemos o seguinte warninng:
InsecureRequestWarning: Unverified HTTPS request is being made to host ‘preprints.scielo.org’. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
Vou gerar uma nova tag com essa correção!.
Descrição da tarefa
Verificando e analisando os repositórios dos projetos, reparei que na produção estamos utilizando um repositório de processamento diferente, segue: https://github.com/scieloorg/search-journals-proc, portanto o processamento dos preprint, deve está no mesmo repositório.
Subtarefas
Considerações e notas