У меня есть экземпляр Jira, работающий на сервере Debian, к которому я хочу получить доступ из облачного приложения HockeyApp. Проблема возникает, когда HockeyApp пытается получить доступ к списку проектов Jira (не удается без ошибок). Поэтому я проверил API Jira и нашел метод, который, как я ожидаю, будет вызван из бэкенда HockeyApp.
Когда я получаю доступ к API с помощью Chrome, https://jira.company.com/rest/api/latest/project
я получаю ожидаемые результаты в виде json. Но когда я пытаюсь вызвать этот API из Postman, curl или httpie, я каждый раз получаю ошибки.
curl говорит мне:
curl: (60) Проблема с сертификатом SSL: невозможно получить сертификат локального издателя. Более подробная информация здесь:https://curl.haxx.se/docs/sslcerts.html
curl не смог проверить легитимность сервера и, следовательно, не смог установить безопасное соединение с ним. Чтобы узнать больше об этой ситуации и о том, как ее исправить, посетите веб-страницу, указанную выше.
Поэтому я попытался загрузить последний файл cacert-2018-10-17.pem и попробовал еще раз. Безуспешно. Если я добавлю опцию -k
игнорировать проверку ssl, я получу ожидаемые результаты.
Если я отключу проверку SSL в настройках postman, я получу ожидаемые результаты. Но сервер не использует самоподписанный сертификат SSL. Сертификат выглядит так:
Сертификат отлично работает во всех браузерах и других подключенных приложениях, таких как Bitbucket и Confluence.
Как я могу узнать причину этой проблемы?
решение1
После долгих поисков мне наконец удалось выяснить, что было причиной проблемы.
Я начал изучать сетевой трафик при выполнении вызова REST из cURL с помощью Wireshark и обнаружил, что сертификат действительно плохой — просто Chrome это не волнует.
поэтому я проверил сертификат с помощью:
openssl s_client -showcerts -connect jira.company.com:443
который отвечает:
Start Time: 1544006181
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
Итак, наконец, я узнал, что сертификат, используемый на моем сервере, не предоставляет полную цепочку сертификации. Вот почему некоторые клиенты отрицают это.
Я изменил JKS, чтобы он содержал полную цепочку копирования файлов crt в один файл company.com.pem (более подробное описание здесь: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-----
и создал новый JKS для установки Jira, используя
openssl pkcs12 -export -in company.com.pem -name tomcat -out jira.p12
keytool -importkeystore -srckeystore jira.p12 -srcstoretype pkcs12
-destkeystore jira.jks -deststoretype JKS