使用Python连接JIRA API时SSL3证书验证失败

14 投票
4 回答
39115 浏览
提问于 2025-04-18 08:05

我现在在用Python2.7和JIRA的REST API连接JIRA时遇到了一个错误(你可以在这里查看相关文档:http://jira-python.readthedocs.org/en/latest/)。

当我执行以下代码时:

from jira.client import JIRA

options = {
    'server': 'https://jira.companyname.com'
}
jira = JIRA(options)

控制台上出现了以下错误信息:

requests.exceptions.SSLError: [Errno 1] _ssl.c:507: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

我是不是漏掉了什么,或者做错了什么呢?

谢谢!

4 个回答

4

只需要安装 python-certifi-win32 这个模块,这样就可以轻松解决这些错误,不用再烦恼了。

9

在Windows系统上,请按照以下步骤操作:

  1. 使用谷歌浏览器打开网站,然后点击锁形图标。
  2. 接着点击证书,会弹出一个新窗口。
  3. 然后点击认证路径,从列表中选择第一个选项,这个选项是根证书,然后选择查看证书,又会弹出一个窗口。
  4. 进入详细信息标签,点击复制到文件。然后点击下一步,选择Base-64编码的x509.(CER)这个选项,点击下一步并将.cer文件保存在本地。

一旦获得了.cer文件,将其添加到Python脚本中,如下所示:

jira_options = {
    'server': jira_server_name,
    'verify': 'path_to_directory_containing_certificate_file/certificate.cer'
}

这样应该就不会出现任何安全警告了。

15

我遇到了类似的SSL证书验证错误,查看了一下“JIRA”的方法定义,发现可以关闭这个验证。

    :param options: Specify the server and properties this client will use. Use a dict with any
     of the following properties:
      * server -- the server address and context path to use. Defaults to ``http://localhost:2990/jira``.
      * rest_path -- the root REST path to use. Defaults to ``api``, where the JIRA REST resources live.
      * rest_api_version -- the version of the REST resources under rest_path to use. Defaults to ``2``.
      * verify -- Verify SSL certs. Defaults to ``True``.
      * resilient -- If it should just retry recoverable errors. Defaults to `False`.

试试这个:

from jira.client import JIRA

options = {'server': 'https://jira.companyname.com','verify':False}
jira = JIRA(options)
16

我知道我来得有点晚,但希望这能帮助到将来的人。


为什么不应该关闭验证

虽然关闭证书验证是最简单的“解决方案”,但这并不是一个明智的选择。这样做实际上是在说:“我不在乎我是否信任你,反正我会把我的所有信息都发给你。”这会让你面临中间人攻击的风险。

如果你正在连接公司的Jira服务器,并且它有TLS/SSL证书,你应该对这个证书进行验证。我建议你问问IT部门这个证书在哪里。它可能在你公司的某个根证书中。

如果你在Chrome浏览器中连接到服务器,地址栏左侧应该会显示一个锁的图标,表示它是通过TLS/SSL安全连接的。

你可以在Chrome中右键点击那个锁 -> 详情 -> 查看证书

那么,我该怎么做呢?

直接向verify选项提供必要的证书。

jira-python使用Requests来处理HTTP相关的内容 (查看文档)。根据Requests文档,你可以在verify中指定证书文件的路径。

因此,你可以像这样在verify中提供你公司的根证书:

jira_options = {
    'server': jira_server_name,
    'verify': 'path/to/company/root/certificate',
}

如果你使用的是Windows机器(这应该是个安全的假设?),那么这个根证书存储在注册表中,获取它的最佳方式是使用wincertstore

撰写回答