C# 无法从macOS上的资源文件加载.pem

C# 无法从macOS上的资源文件加载.pem,c#,.net-core,ssl-certificate,C#,.net Core,Ssl Certificate,我有一个从资源文件加载pem证书的简单方法: /// <summary> /// Helper method to load a .pem and return it as a X509Certificate2 /// </summary> private static X509Certificate2 GetX509Certificate2(string path) { using (var stream = As

我有一个从资源文件加载pem证书的简单方法:

    /// <summary>
    /// Helper method to load a .pem and return it as a X509Certificate2
    /// </summary>
    private static X509Certificate2 GetX509Certificate2(string path)
    {
        using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(path))
        {
            byte[] data = new byte[stream.Length];
            stream.Read(data, 0, (int)stream.Length);
            return new X509Certificate2(data);
        }
    }
//
///方法加载.pem并将其作为X509Certificate2返回
/// 
专用静态X509Certificate2 GetX509Certificate2(字符串路径)
{
使用(var stream=Assembly.getExecutionGassembly().GetManifestResourceStream(路径))
{
字节[]数据=新字节[stream.Length];
读取(数据,0,(int)stream.Length);
返回新的X509Certificate2(数据);
}
}
它在Windows和Ubuntu上运行良好,但在macOS上失败,原因如下:

Interop+AppleCrypto+AppleCommonCryptographics异常:未知 格式导入

我尝试使用
Span
重载,但收效甚微

有人有什么想法/解决办法吗


谢谢

我在这里贴了一张corefx团队的票(我现在已经关闭了):

该异常是由实际包含证书链的文件引起的(它包含多个
----结束证书------
标记)-基础Interop在macOS上不支持此操作

显然,Windows也只使用它遇到的第一个,因此解决方案只是从流中读取足够的字节,直到命中该标记为止(尽管没有理由不能将整个链提取为
X509Certificate2


奇怪的是,我程序集中的文件(包含一个证书链)与我上面链接的文件不同。。。我向@bartonjs表示感谢和歉意,因为这不会有任何帮助

我在这里贴了一张corefx团队的罚单(我现在已经关闭了):

该异常是由实际包含证书链的文件引起的(它包含多个
----结束证书------
标记)-基础Interop在macOS上不支持此操作

显然,Windows也只使用它遇到的第一个,因此解决方案只是从流中读取足够的字节,直到命中该标记为止(尽管没有理由不能将整个链提取为
X509Certificate2


奇怪的是,我程序集中的文件(包含一个证书链)与我上面链接的文件不同。。。我向@bartonjs表示感谢和歉意,因为这不会有任何帮助

是否存在前导或尾随的额外数据?你能分享一个不起作用的值吗?我不确定-我正在使用这个证书(我能找到的第一个过期的证书用于测试):是的,但是你可能在资源创建过程中得到了奇怪的字节。您是否查看了
数据中的实际字节数
?此外,您的读取不能保证读取所有内容/填充
数据
。我使用的是Visual Studio 2017,因此我不认为任何外来转换会影响资源。有可能读到的内容没有读到最后,但这在Windows和Ubuntu上可能会起作用……我可以排除读到的内容(读取的字节数与流长度匹配),字节数组似乎已经填充好了。。。还有其他想法吗?可能有前导或尾随的额外数据吗?你能分享一个不起作用的值吗?我不确定-我正在使用这个证书(我能找到的第一个过期的证书用于测试):是的,但是你可能在资源创建过程中得到了奇怪的字节。您是否查看了
数据中的实际字节数
?此外,您的读取不能保证读取所有内容/填充
数据
。我使用的是Visual Studio 2017,因此我不认为任何外来转换会影响资源。有可能读到的内容没有读到最后,但这在Windows和Ubuntu上可能会起作用……我可以排除读到的内容(读取的字节数与流长度匹配),字节数组似乎已经填充好了。。。还有其他想法吗??