堆栈(Haskell)在Windows中引发TlsException

堆栈 (在Windows下)在尝试下载文件时(例如,在stack setup期间或下载构build计划时)有时会引发以下exception:

 TlsException (HandshakeFailed (Error_Protocol ("certificate has unknown CA",True,UnknownCa))). 

如何避免这个错误,如果它发生?

(这是讨论和解决在https://github.com/commercialhaskell/stack/issues/234 ,我重新提出的问题,使解决scheme更可用。)

这是由于在访问各种网站时证书没有被stack发现。 可以通过在Internet Explorer中打开正确的网页(自动添加证书),然后再次启动堆栈来修复。

要找出哪个网页堆栈访问,使用详细选项(-v)运行堆栈以查看失败前的最后一次尝试下载。 例如:

 C:\> stack -v setup ... some output ... 2015-09-18 14:19:14.9807056: [debug] Downloading from https://www.haskell.org/ghc/dist/7.10.1/ghc-7.10.1-i386-unknown-mingw32.tar.xz to C:\... @(stack_GXibO6avQtx8ez3M6BHFie:Stack.Setup src/Stack\Setup.hs:845:5) TlsException (HandshakeFailed (Error_Protocol ("certificate has unknown CA",True,UnknownCa))) 

(注意:确切的消息可能会有所不同,因为现在我的电脑上已经解决了这个问题,所以如果不重新安装Windows,我不能重现确切的错误。)

所以栈从https://www.haskell.org/下载,所以我们需要在Internet Explorer中打开https://www.haskell.org/ 。 之后堆栈应该工作(可能你需要重复这一步来添加不同的证书)。

其他似乎可以访问的网页是: https : //github.com,https : //www.stackage.org 。

这个解决方案在Win 7 32位和Stack 0.1.4.0上进行验证。