14

Stack(在 Windows 下)在尝试下载文件时(例如,在下载构建计划期间stack setup或下载构建计划时)有时会引发以下异常:

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

如果发生此错误,如何解决?

(这已在https://github.com/commercialhaskell/stack/issues/234上讨论并解决,我正在重新发布问题以使解决方案更可用。)

4

2 回答 2

15

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 上得到验证。

于 2015-09-18T14:27:31.530 回答
1

@unhammer 在没有安装 IE 的情况下如何在已接受的答案的评论中提出问题。我在 Windows docker 实例上遇到了同样的问题,所以我想我会分享我的解决方案。

从 powershell 我运行了以下代码段

$tls_urls = @("https://github.com", "https://www.hackage.org", "https://stackage.haskell.org", "https://s3.amazonaws.com")
$tls_urls |`
  ForEach-Object {
      Invoke-WebRequest -Uri $_ -UseBasicParsing | out-null
  }
于 2021-10-18T06:11:18.637 回答