Tenho uma instância do Jira em execução em um servidor Debian que desejo acessar a partir de um aplicativo em nuvem chamado HockeyApp. O problema acontece quando o HockeyApp tenta acessar a lista de projetos do Jira (falha sem erros). Então verifiquei a API do Jira e encontrei um método que espero ser chamado no back-end do HockeyApp.
Quando acesso a API usando o Chrome em https://jira.company.com/rest/api/latest/project
obtenho os resultados esperados como json. Mas quando tento chamar essa API do Postman, curl ou httpie, sempre recebo erros.
curl me diz:
curl: (60) Problema no certificado SSL: não é possível obter o certificado do emissor local Mais detalhes aqui:https://curl.haxx.se/docs/sslcerts.html
curl não conseguiu verificar a legitimidade do servidor e, portanto, não conseguiu estabelecer uma conexão segura com ele. Para saber mais sobre esta situação e como corrigi-la, visite a página da web mencionada acima.
Então tentei baixar o arquivo cacert-2018-10-17.pem mais recente e tentei novamente. Sem sorte. Se eu adicionar a -k
opção de ignorar a verificação SSL, obtenho os resultados esperados.
Se eu desligar a verificação SSL nas configurações do carteiro, obtenho os resultados esperados. Mas o servidor não usa um certificado SSL autoassinado. O certificado fica assim:
O certificado está funcionando bem em todos os navegadores e outros aplicativos conectados como Bitbucket e Confluence.
Como posso descobrir o que está causando esses problemas?
Responder1
Depois de muito pesquisar, finalmente descobri o que estava causando o problema.
Comecei a examinar o tráfego de rede ao executar uma chamada REST do cURL usando o Wireshark para descobrir que o certificado é realmente ruim - apenas o Chrome não se importa.
então verifiquei o certificado usando:
openssl s_client -showcerts -connect jira.company.com:443
que responde com:
Start Time: 1544006181
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
Finalmente descobri que o certificado usado no meu servidor não fornece a cadeia de certificação completa. É por isso que alguns clientes negam.
Alterei o JKS para conter a cadeia completa copiando os arquivos crt em um arquivo company.com.pem (descrição mais detalhada aqui:https://www.digicert.com/ssl-support/pem-ssl-creation.htm)
-----BEGIN CERTIFICATE-----
(MyCompany.crt)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Intermediate.crt)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Root.crt)
-----END CERTIFICATE-----
e criei um novo JKS para a instalação do jira usando
openssl pkcs12 -export -in company.com.pem -name tomcat -out jira.p12
keytool -importkeystore -srckeystore jira.p12 -srcstoretype pkcs12
-destkeystore jira.jks -deststoretype JKS