Problemas com HTTPS no DSpace 7.6.1

Olá prezados

Estou tentando implementar HTTPS em um de nossos repositórios de teste com DSpace 7.6.1 (livroaberto.ufpa.br), porém estou tendo alguns problemas que infelizmente não estou conseguindo superar.

Estou conseguindo fazer com que o site esteja acessível pelo navegador, porém está com erro 500.

Primeiramente, segui o tutorial da documentação do DSpace. Abaixo irei listar como estão meus arquivos neste momento:

config.prod.yml

ui:
  ssl: false
  host: localhost
  port: 4000
  nameSpace: /
 .
rest:
  ssl: true
  host: livroaberto.ufpa.br
  port: 443
  nameSpace: /server

server.xml

<Connector port="8080"
              minSpareThreads="25"
              enableLookups="false"
              redirectPort="443"
              connectionTimeout="20000"
              disableUploadTimeout="true"
              URIEncoding="UTF-8"/>

<Connector tomcatAuthentication="false" packetSize="65536" protocol="AJP/1.3"
               address="127.0.0.1, ::1"
               port="8009"
               secret="your-secret"
               allowedRequestAttributesPattern=".*"
               redirectPort="443" />

Aqui já entra a primeira dúvida: vejo na documentação que a porta 8080 deve apontar para a 8443 no tomcat. Porém a porta 8443 no sistema não aponta para nada. Somente após eu mudar para 443 foi que consegui visualizar o frontend em meu navegador , apesar do erro 500.

Aquivo “livroaberto.conf” (Apache)

<VirtualHost *:80>
     ServerName livroaberto.ufpa.br

      #automatic redirection from http to https
      Redirect / https://livroaberto.ufpa.br
</VirtualHost>

<VirtualHost *:443>
     ServerName livroaberto.ufpa.br
     LogLevel warn
     ErrorLog ${APACHE_LOG_DIR}/livroaberto.ufpa.br.error.log
     CustomLog ${APACHE_LOG_DIR}/livroaberto.ufpa.br.access.log combined
     ProxyRequests on
     SSLEngine on
     SSLProxyEngine on



     #check and insert here the correct paths to your domain certs:
     #If you used Certbot to install certs, the certs paths are shown here:
     SSLCertificateFile /etc/tomcat9/certificado_SSL/new-livro_crt.crt
     SSLCertificateKeyFile /etc/tomcat9/certificado_SSL/livroaberto.key
     SSLCertificateChainFile /etc/tomcat9/certificado_SSL/intermediate.pem
     SSLCompression off
     SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
     SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA>
     SSLHonorCipherOrder     off
     SSLSessionTickets       off
     ProxyPreserveHost on
     RequestHeader set X-Forwarded-Proto https

   <Proxy *>
       AddDefaultCharset Off
       Require all granted
   </Proxy>

        # PROXY for backend. Keep only localhost here! not insert your domain name!
     ProxyPass /server http://localhost:8080/server
     ProxyPassReverse /server http://localhost:8080/server

     ProxyPass /server/ ajp://localhost:8009/server secret=

        # AJP Directives
     ProxyIOBufferSize 65536


        # PROXY for frontend. Keep only localhost here! not insert your domain name!
     ProxyPass / http://localhost:4000/
     ProxyPassReverse / http://localhost:4000/
</VirtualHost>

Conforme não fui obtendo sucesso em minha configuração, eu utilizei outros tutoriais, por isso que tá uma mistura rs

As chaves SSL são repassadas pela unidade de TI da Universidade.

Arquivo local.cfg

dspace.server.url = https://livroaberto.ufpa.br/server
dspace.ui.url = https://livroaberto.ufpa.br

Aí entra uma outra dúvida: os arquivos local.cfg e dspace.cfg estão presentes tanto em /dspace/config quanto em /home/dspace/DSpace-dspace-7.6.1. Qual é o que vale?

Fazendo o yarn test:rest, aparentemente tudo ok

dspace@livroaberto:~/dspace-angular-dspace-7.6.1$ yarn test:rest
yarn run v1.22.21
$ ts-node --project ./tsconfig.ts-node.json scripts/test-rest.ts
Building production app config
Overriding app config with /home/dspace/dspace-angular-dspace-7.6.1/config/config.yml
Overriding app config with /home/dspace/dspace-angular-dspace-7.6.1/config/config.prod.yml
...Testing connection to REST API at https://livroaberto.ufpa.br/server/api...

RESPONSE: 200

Checking JSON returned for validity...
        "dspaceVersion" = DSpace 7.6.1
        "dspaceUI" = https://livroaberto.ufpa.br
        "dspaceServer" = https://livroaberto.ufpa.br/server
        "dspaceServer" property matches UI's "rest" config? true
        Does "/api" endpoint have HAL links ("_links" section)? true
Done in 1.92s.

Quando tento acessar a página inicial do repositório, recebo um erro de proxy:
Captura de tela 2024-07-05 145845

E a única página que me exibe algo da interface é a página de erro 500:

Estes são os logs do pm2:

Tenho ajustado o redirecionamento no tomcat de 8080 para 8443 e para 443, porém tudo dá no mesmo.

Já revi tudo o que realizei, porém nada adiantou até o momento.

Ah sim, o Solr e o HAL Browser são acessível localmente, e até mesmo de fora da máquina onde está o sistema (acredito que isto não deveria ocorrer, certo?)

Sei que são muitos problemas e situações, mas quem puder me dar algum tipo de luz, eu ficaria muito grato. Já estou a alguns dias vendo e revendo configurações, fazendo uma série de tentativas, mas tudo sem sucesso. O maior avanço que tive foi conseguir uma resposta 200 no yarn test:rest.

Att.

2 curtidas

Estou voltando aqui para dar um retorno sobre minha situação. Resumindo, consegui resolver meu problema.
Eu até queria apagar meu post, por conta dos vários problemas que consigo observar agora, porém acho que o mais importante é não deixar um post sem conclusão e dar uma satisfação a quem passe por isso no futuro, então lá vai:

Resolvi respirar fundo e voltar à prática de instalar novamente o DSpace. Desde o ano passado que não fazia isto, e por ter esquecido alguns conceitos, desta vez resolvi voltar a estudar dspace, porém desta vez lendo com bastante calma a documentação e instalando o DSpace 8. Recomeçar do zero me daria a possibilidade de rever uma série de coisas (relembrando coisas e tirando várias dúvidas de bônus)

A configuração que a documentação do DSpace provê já é o suficiente para o HTTPS (parece besta dizer isso, mas às vezes eles são muito superficiais):

Aqui a configuração do Apache que deu certo comigo:

<VirtualHost *:443>
    # Add your domain here. We've added "my.dspace.edu" as an example
    ServerName my.dspace.edu

    # Most installs will need these options enabled to ensure DSpace knows its hostname and scheme (http or https)
    # Also required to ensure correct sitemap URLs appear in /robots.txt for User Interface.
    ProxyPreserveHost On
    RequestHeader set X-Forwarded-Proto https

    SSLEngine on
    SSLCertificateFile /apontando/para/o/arquivo.crt
    SSLCertificateKeyFile /apontando/para/o/arquivo.key

    # LetsEncrypt certificates (and possibly others) may require a chain file be specified
    # in order for the UI / Node.js to validate the HTTPS connection.
    SSLCertificateChainFile /apontando/para/o/arquivo.pem


    # Proxy all HTTPS requests to "/server" from Apache to Tomcat via AJP connector
    ProxyPass /server ajp://localhost:8009/server
    ProxyPassReverse /server ajp://localhost:8009/server

    # If you would rather use mod_proxy_http as an http proxy to port 8080
    # then use these settings instead
    #ProxyPass /server http://localhost:8080/server
    #ProxyPassReverse /server http://localhost:8080/server

    # [NEW FOR UI:] Proxy all HTTPS requests from Apache to PM2 on localhost, port 4000
    # NOTE that this proxy URL must match the "ui" settings in your config.prod.yml
    # (In this example: https://my.dspace.edu/ will display the User Interface)
    ProxyPass / http://localhost:4000/
    ProxyPassReverse / http://localhost:4000/

</VirtualHost>

Importante configurar adequadamente os arquivos SSL.

A única configuração que precisei realizar no server.xml do Tomcat foi a seguinte:

`<Connector protocol="AJP/1.3" port="8009" redirectPort="8443" URIEncoding="UTF-8" secretRequired="false"/>`

Incluindo o final 'secretRequired=“false” ', que pelo visto a falta quase sempre dá problemas.

Uma coisa importante que não atentei foram aos módulos do Apache. Por bobeira não visualizei com atenção os logs do Apache (olhem os logs!), e pelo menos nessa instalação do DSpace 8 estava faltando ativar um módulo em que a fazia com que o frontend não estivesse acessível de forma alguma (o /server no entanto estava)

sudo a2enmod proxy_http

Os outros módulos instalados são os mesmos recomendados na documentação:

sudo a2enmod headers

sudo a2enmod proxy

sudo a2enmod proxy_ajp

O restante da configuração (local.cfg e config.prod.yml) estavam corretos, e o “yarn test:rest” ajuda bastante a verificar se está tudo certo e configurado corretamente (recomendo olhar também os logs do pm2 - “pm2 logs”).
Após instalar o módulo e reiniciar os serviços correspondentes, enfim obtive sucesso na visualização do site.

Problema resolvido no DSpace 8, agora é partir para os testes com o 7.6.1, porém o meu objetivo principal foi atingido. Com esta minha prática bem sucedida vou rever tudo de errado que já fiz nas VMs anteriores e aplicar nos outros repositórios, que ainda serão atualizados no futuro.

Espero que isto ajude quem mais estiver passando por estes mesmos problemas.

Claro, se voltar a ter problemas, irei retornar ao post para pedir ajuda aos colegas que puderem ajudar rs

Até mais :wink: .

1 curtida

Leonardo obrigado por compartilhar essas informações, o conteúdo que você forneceu é extremamente útil e certamente ajudará outras pessoas que estejam enfrentando problemas semelhantes.

Gostaria de destacar a importância de garantir que a configuração das URLs nos arquivos dspace.cfg do back-end e config.prod.yml do front-end estejam iguais. Caso contrário, o front-end pode não conseguir acessar o back-end, resultando no erro 500. Além disso, outro ponto que você mencionou são os logs. Quando o erro 500 ocorre, é sempre recomendável verificar o log do back-end em [dspace-back]/log/dspace.log e os logs do Tomcat em [tomcat]/logs/catalina.out.

Mais uma vez, obrigado pelas informações

1 curtida