Jira Server Rest API 无法与 SSL 正确配合使用

Jira Server Rest API 无法与 SSL 正确配合使用

我在 Debian 服务器上运行了一个 Jira 实例,我想从名为 HockeyApp 的云应用程序访问它。当 HockeyApp 尝试访问 Jira 的项目列表时,就会出现问题(失败且无错误)。因此,我检查了 Jira API,并找到了一个我希望从 HockeyApp 后端调用的方法。

当我使用 Chrome 访问 API 时,https://jira.company.com/rest/api/latest/project我获得了预期的 json 结果。但是当我尝试从 Postman、curl 或 httpie 调用此 API 时,每次都会出现错误。

curl 告诉我:

curl:(60)SSL 证书问题:无法获取本地颁发者证书更多详细信息请参见:https://curl.haxx.se/docs/sslcerts.html

curl 无法验证服务器的合法性,因此无法与其建立安全连接。要了解有关此情况的更多信息以及如何修复它,请访问上面提到的网页。

因此,我尝试下载最新的 cacert-2018-10-17.pem 文件并再次尝试。没有任何运气。如果我添加-k忽略 SSL 验证的选项,我确实会得到预期的结果。

邮递员告诉我: 在此处输入图片描述

如果我在 Postman 的设置中关闭 SSL 验证,我确实会得到预期的结果。但服务器不使用自签名 SSL 证书。证书如下所示: 在此处输入图片描述

该证书在所有浏览器以及其他连接的应用程序(如 Bitbucket 和 Confluence)上运行良好。

我怎样才能找出导致此问题的原因?

答案1

经过大量挖掘后,我终于发现了问题的原因。

当我使用 Wireshark 从 cURL 执行 REST 调用时,我确实开始查看网络流量,发现证书确实不好 - 只是 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-----

并使用以下方式为 jira 安装创建一个新的 JKS

openssl pkcs12 -export -in company.com.pem -name tomcat -out jira.p12
keytool -importkeystore -srckeystore jira.p12 -srcstoretype pkcs12 
        -destkeystore jira.jks -deststoretype JKS

相关内容