使用ssl_ca_file时

时间:2016-07-27 21:30:15

标签: ruby jira rest-client

拔出我的头发试图获得对JIRA票证的REST更新,特别是在指定要在事务中使用的证书文件时。

我在Ruby 2.2.0中使用RestClient gem(2.0.0)。

根据文档(herehere),我需要创建一个新资源,然后在其上调用一个方法,而不是更短的更直接的语法。

使用这种构造样式对JIRA的POST请求正常工作:

endpoint = "#{opts['jiraHost']}/rest/api/2/issue"
request = RestClient::Resource.new(endpoint,
   ssl_ca_file: certfile, 
   headers: {
     Authorization: 'Basic b3B....', 
     content_type: :json, 
     accept: :json}
)
response = request.post(ticketParams.to_json)

我收到成功回复并创建了一张票。

使用PUT动词的轻微修改版本因400 Bad Request而失败。

endpoint = "#{opts['jiraHost']}/rest/api/2/issue/#{ticket[:issueKey]}"
request = RestClient::Resource.new(endpoint, 
     ssl_ca_file: certfile, 
     headers: {
       Authorization: 'Basic b3B....', 
       content_type: :json, 
       accept: :json}
)
response = request.put(ticketParams.to_json)

对于非SSL JIRA安装执行此操作并省略SSL CA File参数时,更新的部分是更新正常。我可以通过Postman进行相同的更新调用,它可以正常工作。

在文档中给出的示例中,有一些示例指定了带有GET的证书文件,但没有指定其他动词,只有一个示例是Resource.post(有效负载)。我怀疑我把ssl_ca_file放在了错误的地方,但我已经尝试了所有我能想到的变化都无济于事。

(有人会问为什么我不能依赖系统的证书存储。我不能;我已经尝试了所有东西,只指定了cert文件允许我连接。)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我的错...答案在于error.response.body,其中包含一条特定于JIRA的错误消息。根本不是SSL选项。