由不受信任的机构颁发的证书链

23

我正在使用curl终端程序,当我执行以下命令时:

curl --anyauth --user admin:admin "https://localhost:8000/LATEST/search?q=caesar"

出现以下警告:

curl: (77) schannel: next InitializeSecurityContext failed: SEC_E_UNTRUSTED_ROOT (0x80090325) - 证书链由不受信任的颁发机构签发。

请建议。我已经在Windows上安装了curl,并下载了.pem文件并将其放置在同一个文件夹中。


2
curl支持许多不同的SSL/TLS堆栈,但您的错误消息表明您正在使用的堆栈使用schannel,它将Windows证书存储作为其信任存储。请确保您服务器证书链的根证书已经被导入到Windows证书存储的TrustedRoot部分(而不是其他部分)针对您的用户ID(而不是其他用户ID,因为例如Windows将LocalService和NetworkService帐户视为与交互式用户帐户不同)。 - dave_thompson_085
你能否再解释一下?我需要在哪里进行更改? - Aviator
2
选项A:将证书文件重命名为以.cer或.crt结尾,然后双击它,再点击“安装”,选择“CurrentUser”,在“PlaceIn”中选“TrustedRootCAs”,确认即可。选项B:Windows控制面板中打开Internet选项;或者在IE的工具/Internet选项中打开;或者(甚至在Windows10中)开始菜单搜索inetcpl.cpl;选择内容/Certificates/TrustedRootCAs,然后点击导入,选择您的文件并确认。选项C:启动mmc,文件/AddSnapin Certificates for MyUser,点击确定;或者运行certmgr.msc;右键TrustedRootCAs,选AllTasks/Import,选择您的文件并确认。 - dave_thompson_085
2个回答

42

如果你的服务器使用自签名证书,那么默认情况下,curl 不知道它是否可以信任服务器所声称的身份,并且不想与其通信。

你可以选择:

  • 将该证书导入到受信任的存储库中(最佳和最安全的方式)
  • 应用 -k--insecure 开关以忽略并继续。这可能适用于本地开发。
  • 使用由受信任 CA 签署的真正证书

1
谢谢。正是我所需要的。 - nocdib

1

对于本地开发和快速解决方案,请在执行以下代码之前运行此行:

set_config(config(ssl_verifypeer = 0L))

然后再运行以下代码:

httr::GET(...)

但是建议使用真正的证书。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接