scieloorg / search-journals

iAHx Search Interface for SciELO
http://search.scielo.org
BSD 2-Clause "Simplified" License
3 stars 13 forks source link

Remover o processamento do repositório do search.scielo.org #494

Closed jamilatta closed 4 years ago

jamilatta commented 4 years ago

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

jamilatta commented 4 years ago

Problema de certificado ao tentar rodar a imagem e executar o update_search_preprint:

Screenshot 2020-04-14 08 43 40
jamilatta commented 4 years ago

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')"]
jamilatta commented 4 years ago

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:

Screenshot 2020-04-14 12 29 15

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)"]
jamilatta commented 4 years ago

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

jamilatta commented 4 years ago
Screenshot 2020-04-15 09 29 33
jamilatta commented 4 years ago

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!.