6

我编写了一个 CRUD 应用程序来与 JIRA 交互。我最终升级了我的 haskell 环境,因为 cabal-dev 并不能解决所有问题。结果,我遇到了一些问题,每当我尝试使用与 JIRA 接口的任何代码时都会出现此错误。

Spike: HandshakeFailed (Error_Misc "user error (unexpected type received. expecting
handshake and got: Alert [(AlertLevel_Warning,UnrecognizedName)])")

经过一番谷歌搜索,我认为这与 tls 或使用 tls 的 http-conduit 有关。

我目前正在使用tls-1.1.2http-conduit-1.8.7.1 以前我正在使用 tls-0.9.11http-conduit >= 1.5 && < 1.7(不确定哪个,旧安装已经消失。

这就是我相信休息发生的地方

manSettings :: ManagerSettings
manSettings = def { managerCheckCerts = \ _ _ _-> return CertificateUsageAccept }

这就是它过去的样子

manSettings :: ManagerSettings
manSettings = def { managerCheckCerts = \ _ _ -> return CertificateUsageAccept }

这是使用它的代码

initialRequest :: forall (m :: * -> *). URI -> IO (Request m,Manager)
initialRequest uri = do
   initReq <- parseUrl uri -- let the server tell you what the request header
                           -- should look like 
   manager <- newManager manSettings -- a Manager manages http connections
                                     -- we mod the settings to handle
                                     -- the SSL cert. See manSettings below.
   return (modReq initReq,manager)
      where modReq initReq = applyBasicAuth username password initReq

让我知道我是否遗漏了什么。在这一点上,我不确定从那时到现在发生了什么。

4

1 回答 1

4

这是对错误来源的一个很好的猜测,但不太可能:managerCheckCerts 只是使用证书包来检查证书的有效性。您看到的错误消息似乎来自 tls 本身,表明数据传输失败。使用 tls 提交错误报告可能是一个好主意,最好首先将问题缩小到失败的单个 HTTPS 调用(或者甚至更好,单独使用 tls 并展示相同的失败)。

于 2013-02-14T05:19:22.380 回答