“dotnet Restore”失败,并显示“SSL 对等证书或 SSH 远程密钥不正常”

2023-12-10

我刚刚按照这里的程序进行操作:https://www.microsoft.com/net/core#ubuntu

这就是输出dotnet restore

log  : Restoring packages for /home/test/project.json...
error: Unable to load the service index for source https://api.nuget.org/v3/index.json.
error:   An error occurred while sending the request.
error:   SSL peer certificate or SSH remote key was not OK

我已将相关证书添加到受信任的证书中,以便使curl工作但错误仍然存​​在dotnet restore.

我试图挖掘核心源代码来了解 Nuget 如何检查 SSL 证书,但没有成功。我尝试过的版本:

  • 1.0.0-预览1-002702
  • 1.0.0-预览2-003100

我已经使用以下命令配置了curl.curlrc :

cacert=/etc/ssl/certs/ca-certificates.crt

它已修复curl -I https://api.nuget.org调用。

However dotnet restore -v Debug仍然失败:

trace: Running restore with 8 concurrent jobs.
trace: Reading project file /home/user/test/project.json.
log  : Restoring packages for /home/user/test/project.json...
trace: Restoring packages for .NETCoreApp,Version=v1.0...
error: Unable to load the service index for source https://api.nuget.org/v3/index.json.
error:   An error occurred while sending the request.
error:   SSL peer certificate or SSH remote key was not OK
trace: System.AggregateException: One or more errors occurred. (Unable to load the service index for source https://api.nuget.org/v3/index.json.) ---> NuGet.Protocol.Core.Types.FatalProtocolException: Unable to load the service index for source https://api.nuget.org/v3/index.json. ---> System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.CurlException: SSL peer certificate or SSH remote key was not OK
trace:    at System.Net.Http.CurlHandler.ThrowIfCURLEError(CURLcode error)

所以 dotnet core 使用libcurl但它不使用.curlrc明显地。

编辑:2016 年 6 月 21 日

也尝试使用 mozroots 更新证书数据库,但没有任何效果。 (即使 dotnet core 构建页面提到它,似乎与 mono 的关系比与 dotnetcore 的关系更密切)。

深入研究 corefx 代码后,System.Net.Http 的 Curl 处理程序似乎并未在所有情况下设置正确的 ssl 选项(例如简单的 Curl SSL 示例).

我试过了Tyler解决方案:

certmgr -ssl -m https://api.nuget.org

即使我输入,这也不会添加最后一个证书'y', 'yes', '1', 'true'管他呢。

mozroots --url https://hg.mozilla.org/mozilla-central/raw-file/tip/security/nss/lib/ckfw/builtins/certdata.txt --sync --import

这做了一些事情:

Importing certificates into user store...
194 new root certificates were added to your trust store.
Import process completed.

我不相信 dotnet core 使用了 libcurl nss 构建(只是因为他们的开发页面讲述 openssl 版本(并且它们是互斥的)。顺便说一句,我尝试使用 libcurl 的 nss 构建,但 dotnet 恢复仍然失败。

恕我直言,这个问题与错误的证书注册无关,但更多的是关于curl内置证书验证未正确禁用的事实(因为证书验证是在System.Net.Http中完成的,并且必须向客户端代码提供以下能力:自定义此验证)。

为什么它发生在我的机器上而不是其他地方? 肯定和我的libcurl版本有关。

然而,所有这些目前都只是假设。

编辑2016年5月22日:

通过更彻底地查看代码,特别是在比较 master 分支和 RC2 版本时,很明显 SSL 处理代码仍然存在很大变化。

所以我只是获取 RC2 代码并修改它以反映 master 分支的作用:

easy.SetCurlOption(Interop.Http.CURLoption.CURLOPT_SSL_VERIFYHOST, 0);

然而,它并没有改变任何东西......但预测它是。 所以这里是我使用的代码:

easy.SetCurlOption(Interop.Http.CURLoption.CURLOPT_SSL_VERIFYPEER, 0);

然后将 System.Net.Http.dll 替换为禁用 ssl 证书检查。 不安全,但暂时解锁我。

我没有将其添加为答案,因为它更像是一种黑客而不是修复。

(真正的解决方法是完全禁用由curl完成的证书检查并始终在.Net core中处理它,但在master上的当前代码中,情况仍然不是这样,它更像是两者的混合)。

对于根本原因,我认为我正在进行特定的设置:

  • libcurl 构建时没有任何默认证书捆绑路径。curlconfig --ca返回一个空字符串。并且它不读取CURL_CA_BUNDLE环境变量或.curlrc file.
  • System.Net.Http(dotnet-core 的)既不设置 ca 默认值,也不禁用证书验证。

打开 SSL 缺少捆绑证书

The 根本原因缺少配置openssl.
如果您运行以下命令(或类似命令):

openssl verify /usr/share/ca-certificates/nuget.crt

您会收到以下结果:

/usr/share/ca-certificates/nuget.crt: C = US, ST = Washington, L = Redmond, O = Microsoft Corporation, OU = Microsoft IT, CN = Microsoft IT SSL SHA2
error 2 at 1 depth lookup:unable to get issuer certificate
140075910137504:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
140075910137504:error:0B06F009:x509 certificate routines:X509_load_cert_file:PEM lib:by_file.c:162:

这是因为openssl(dotnet / libcurl 最终依赖于它来进行 ssl 检查)不知道在哪里可以找到 ca 捆绑包。我没有看到任何相关参数/etc/ssl/openssl.cnf如此均匀

export OPENSSL_CONF=/etc/ssl/openssl.cnf

对 openssl 验证失败没有帮助。

但是,以下内容解决了这两个问题(openssl 和 nuget)

export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt

现在的输出为openssl:

zsh/2 906 [1] # openssl verify /usr/share/ca-certificates/nuget.crt
/usr/share/ca-certificates/nuget.crt: OK

and for dotnet restore:

zsh 904 # dotnet restore
log  : Restoring packages for /home/user/test/project.json...
info :   GET https://api.nuget.org/v3-flatcontainer/microsoft.netcore.dotnethostresolver/index.json
info :   OK https://api.nuget.org/v3-flatcontainer/microsoft.netcore.dotnethostresolver/index.json 412ms
info :   GET https://api.nuget.org/v3-flatcontainer/microsoft.netcore.dotnethost/index.json
info :   OK https://api.nuget.org/v3-flatcontainer/microsoft.netcore.dotnethost/index.json 409ms
info : Committing restore...
log  : Lock file has not changed. Skipping lock file write. Path: /home/user/test/project.lock.json
log  : /home/user/test/project.json
log  : Restore completed in 4412ms.

NuGet Config files used:
    /home/user/.nuget/NuGet/NuGet.Config

Feeds used:
    https://api.nuget.org/v3/index.json

特别感谢Tyler谁帮助我保持解决这个问题的动力。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“dotnet Restore”失败,并显示“SSL 对等证书或 SSH 远程密钥不正常” 的相关文章

  • 使用32位应用程序获取syswow64目录

    我正在尝试在系统目录中查找文件 问题是当使用 Environment SystemDirectory 在 x64 计算机上 我仍然获得 System32 目录 而不是 Systemwow64 目录 我需要在 x86 机器上获取 System
  • 专家 C#/.Net/WPF 开发人员应该了解哪些知识? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从 VS.NET 2008 转换到 2010 时 Windows 服务安装项目出现问题

    我正在尝试将解决方案从 VS NET 2008 转换为 2010 该解决方案包括一个 Windows 服务项目和一个安装 Windows 服务的安装项目 我在编译安装项目时遇到问题 我已经尝试按照教程从头开始几次here http msdn
  • 何时使用 IComparable 与何时使用IComparer

    我正在尝试找出我需要实现哪些接口 他们本质上都做同样的事情 我什么时候会使用其中一种而不是另一种 好吧 他们不是quite与IComparer
  • .NET 迭代器包装抛出 API

    我有一个带有 API 的类 它允许我请求对象 直到它抛出一个IndexOutOfBoundsException 我想将它包装到一个迭代器中 以便能够编写更清晰的代码 但是 我需要捕获异常以停止迭代 static IEnumerable It
  • 如何将字符串解析为 UNIQUEIDENTIFIER?

    我正在编写一个实体框架 LINQ 查询 其中我想将字符串解析为 UNIQUEIDENTIFIER 又名 GUID 作为WHERE clause public IEnumerable
  • 从基础创建 Uri,不带尾部斜杠和相关部分

    我的 Uri 构造函数有问题 基本路径是否以斜杠结尾的结果会有所不同 var baseWithSlash new Uri c Temp var baseNoSlash new Uri c Temp var relative MyApp va
  • 如何在 WPF 应用程序中实现气球消息

    我们想使用气球消息 如UX Guide http msdn microsoft com en us library aa511451 aspx来自微软 我发现一些示例使用 Windows 窗体中的本机代码 但本机代码需要组件的句柄 这对于
  • 是否有用户友好的 Log4Net 日志文件查看器? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 是否有任何第三方工具可以识别 Log4Net 日志文件结构并通过提供搜索功能等以用户友好的方式显示它 Try 色域日志查看器 https source
  • FullCalendar Asp.Net WebForms

    我正在尝试实施全日历 https i stack imgur com wmhGx png在我的 ASP NET 上WebForms项目 我见过一些实现此目的的示例 但没有任何运气 因为它们是针对我不习惯的 MVC 的 My Events数据
  • ASP.NET Core 与现有的 IoC 容器和环境?

    我想运行ASP NET 核心网络堆栈以及MVC在已托管现有应用程序的 Windows 服务环境中 以便为其提供前端 该应用程序使用 Autofac 来处理 DI 问题 这很好 因为它已经有一个扩展Microsoft Extensions D
  • 如何引用解决方案之外的项目?

    我有一个 Visual Studio C 解决方案 其中包含一些项目 其中一个项目需要引用另一个不属于解决方案的项目 一开始我引用了dll
  • 列出运行时从开放泛型类型创建的封闭类型

    当我列出当前 AppDomain 中的所有类型时 我会看到带有通用占位符的通用类型 但是 如果我使用类型实例化泛型类型 然后列出 appDomain 中的所有类型 则我看不到新创建的封闭类型 在下面的示例中 输出仅为 Foo 1 T 我正在
  • 为什么 System.Math 有 Sin、Cos 等外部方法?

    MethodImpl MethodImplOptions InternalCall public static extern double Sin double a 其原因何在 MethodImplOptions InternalCall表
  • 从 SQL Server 读取十进制值时出现溢出异常

    我想知道这是一个错误还是我做错了什么 我正在加载值SqlDataReader来自 SQL Server 2008 数据库 但在某些情况下 它无法将 SQL 值转换为 net 值 NET 4 0 我已将其追溯到一个测试用例 它演示了实际问题
  • 没有端点在 net.pipe://localhost/ 上监听

    我有两个 WCF 服务托管在 Windows Server 2003 计算机上的单个 Windows 服务中 如果 Windows 服务需要访问任一 WCF 服务 例如发生定时事件时 它将使用公开的五个命名管道端点之一 不同的服务协定 该服
  • C# 要么返回 false 要么什么也不做

    我想知道是否有办法不必重复相同的事情如果施工而是调用一个状态检查 成功后无法返回true 有人知道这个问题更好的标题吗 bool Enable if GetStatus ref status Trace WriteLine Error re
  • 读取 C# 中的默认应用程序设置

    我的自定义网格控件有许多应用程序设置 在用户范围内 其中大部分是颜色设置 我有一个表单 用户可以在其中自定义这些颜色 并且我想添加一个用于恢复默认颜色设置的按钮 如何读取默认设置 例如 我有一个名为的用户设置CellBackgroundCo
  • 如何在 C# 控制台应用程序中将修饰符(ctrl、alt、shift)按键捕获为单个按键?

    Console ReadKey 仅在按下 正常 键时捕获输入 然后将修饰符 如果有 附加为键信息的一部分 如何将单个修饰键注册为输入 提供了一种解决方案这个链接 https blogs msdn microsoft com toub 200
  • Global.asax PostAuthenticateRequest 事件绑定是如何发生的?

    我怎样才能使用发布验证请求Global asax 事件 我正在跟进本教程 http www asp net security tutorials forms authentication configuration and advanced

随机推荐

  • 如何正确启动 Angular Universal 到实时服务器

    我通过修改此处找到的通用启动器种子来设置和工作网站 https github com angular universal starter我已经让我的网站在 localhost 节点服务器上工作 呈现 HTML 现在我已经安装了 SSH 连接
  • jQuery fullCalendar 和 qTip

    我正在考虑使用 fullCalendar 并使用 qTip 使用 eventMouseover 显示描述 有没有人设法做到这一点或知道解决方案 我已经谷歌搜索并尝试实施这个帖子但我没有任何快乐 我唯一一次让它工作时它陷入了循环并导致我的浏览
  • 可选择注入内容脚本

    内容脚本可以通过在扩展清单文件中声明以编程方式或永久注入 程序注入需要主机权限 通常由浏览器或页面操作授予 在我的用例中 我想注入 gmail outlook com 和 yahoo 邮件网站 而无需用户操作 我可以通过声明所有这些清单来做
  • 在 C++ 中以编程方式设置 Firemonkey 控件字体

    我有一个自定义 Firemonkey 控件 它扩展了TEdit这是在表单上动态创建的 我试图在创建它时设置它的字体大小 Search gt Font gt Size 15 但是 控件上的字体保持不变 我有另一个相同类型的控件 该控件已经在表
  • 在 CF.NET 中创建大位图时出现 OutOfMemoryException

    我的紧凑框架应用程序通过将所有项目渲染到大位图表面 然后将该位图复制到屏幕上的偏移位置 以便仅显示适当的项目来创建平滑滚动列表 旧版本仅渲染当时应该出现在屏幕上的项目 但这种方法对于平滑滚动界面来说太慢了 最初创建大位图时 它偶尔会生成 O
  • PHP - MySQL 从存储过程中获取输出参数的值

    我使用 PHP 从 PHP 调用了 MySQL 存储过程mysqli 它有一个输出参数 rs mysqli gt query CALL addNewUser name age id 这里 id 是输出参数 接下来 我触发以下查询来获取 ou
  • 如何从 UICollectionViewCell 呈现 AlertView

    我正在使用 UICollectionView 和标题中的地图 我想处理核心位置错误 我有 3 种错误类型 对于其中两种 我想提供一个UIAlertView 但我收到错误 因为UICollectionViewCell没有名为的成员presen
  • 使用 java 中的代理代码连接到站点

    我想通过java中的代理连接到as站点 这是我写的代码 public class ConnectThroughProxy Proxy proxy new Proxy Proxy Type HTTP new InetSocketAddress
  • wss 龙卷风连接问题

    龙卷风服务器 ssl options certfile server crt keyfile server key application Application server tornado httpserver HTTPServer a
  • Spring验证返回很长的错误消息,而不仅仅是自定义的消息

    Spring验证返回很长的错误消息而不是自定义的一次 这是 dto 中的代码部分 public class RequestDto implements Serializable NotNull message id required pri
  • IE 11 的模板标签 polyfill - 不适用于表 tr 和 td

    我使用polyfill js 它允许处理不支持它的浏览器的标签 上的polyfill源代码jsfiddle Source question 但我注意到 在 IE 11 中 这个 polyfill 无法与包含以下内容的模板一起使用 tr an
  • 使用 Visual Studio 2010 和 HG 进行版本控制

    最近 我和我的团队获得了一个用于版本控制的 HG 存储库 因为这将使我们的应用程序开发变得更容易 更好 我们使用 Visual Studio 2010 和 c 所有项目都处于版本控制之下 不幸的是 当我们其中一个人提交时 另一个人在打开解决
  • 正则表达式在所有标点符号之间添加空格

    我需要在字符串中的所有标点符号之间添加空格 Hello World gt Hello World It s 9 00 gt It s 9 00 1 B 3 D gt 1 B 3 D 我认为正则表达式是正确的方法 可以匹配所有非标点符号 a
  • Spark 中的倾斜

    我有一个数据集 我想按特定键 clientID 进行分区 但某些客户端产生的数据比其他客户端多得多 Hive 中有一个功能称为 列表分桶 由 调用倾斜于 专门针对这种情况 但是 我找不到任何迹象表明 Spark 支持此功能 或者如何 如果支
  • Android 开发 - 转换为 Dalvik 格式失败,错误 1

    所以我第一次涉足这个领域 我按照说明安装了 android SDK 和 eclipse 插件 我创建了一个空白的新 android 项目 但出现以下构建错误 2011 01 08 16 34 55 xxx Dxno classfiles s
  • Maximo 公式可以返回 null 吗?

    在 Maximo 7 6 1 1 中 我在持久字段上有一个属性公式 称为WORKORDER X 字段类型为十进制 长度为18 小数位为10 该公式的目的是做到这一点 如果 WOSERVICEADDRESS LONGITUDEX 不为空 则使
  • Java中System.out.println的含义是什么?

    这是静态的吗println函数于out班级来自System命名空间 namespace System class out static println 我该如何解释这个名字 这个函数在 JRE 中的什么地方定义的 在java lang Sy
  • 在 groovy 脚本中从 ant - sshexec 获得格式良好的输出

    我的问题是 ant 任务的输出总是在开头有一些 ssh exec 信息文本 我可以抑制 禁用它吗 到目前为止我的代码 def ant new AntBuilder variable definition ant sshexec host h
  • OS X 上的 Matplotlib 问题(“ImportError:无法导入名称 _thread”)

    在过去几天的某个时候 Matplotlib 停止在 OS X 上为我工作 这是我尝试时遇到的错误import matplotlib Traceback most recent call last File my path to script
  • “dotnet Restore”失败,并显示“SSL 对等证书或 SSH 远程密钥不正常”

    我刚刚按照这里的程序进行操作 https www microsoft com net core ubuntu 这就是输出dotnet restore log Restoring packages for home test project