当前位置: 首页 > 知识库问答 >
问题:

带有Windows证书存储的GRPC C#SSL客户端

淳于亦
2023-03-14

我想使用.Net 4.8下的Windows证书存储中的证书建立GRPC SslCredentials()。此链接非常类似,但不提供有效的解决方案。

https://github.com/grpc/grpc/issues/8978

我使用类似于以下内容的代码。ExportToPEM() 是将证书转换为 PEM 格式的自行尝试,但它不起作用。我希望GRPC的C#包装器能够使这变得容易。

var cred = new SslCredentials(GetCertificate());
Channel = new Channel("127.0.0.1", BINDING_PORT, cred);

            
private static string GetCertificate()
{
    var storex = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
    storex.Open(OpenFlags.ReadOnly);
    var certificatesx = storex.Certificates.Find(X509FindType.FindBySubjectName, CERTIFICATE_SUBJECTNAME, true);
    if (certificatesx.Count > 0)
    {
        foreach (X509Certificate2 cert in certificatesx)
        {
            if (!string.IsNullOrWhiteSpace(cert.FriendlyName) && cert.FriendlyName == ROOT_CERTIFICATE_FRIENDLYNAME)
            {
               return ExportToPEM(cert.GetRSAPrivateKey());
            }
        }
    }
    ...
}

共有2个答案

强化
2023-03-14

我发现Grpc的预发布。net Core自动处理证书并提供。Net标准2.0支持,但我已经放弃了GRPC架构,因为我不能让它在必要的工作。Net 4.8客户端和操作系统混合。一位作者指出,我可以让它在最新的Windows 10操作系统上运行,但我不能受到那样的限制。

边明煦
2023-03-14

您是否尝试过Grpc.Net客户端无法使用SSL连接到服务器的答案中的代码https://stackoverflow.com/users/727250/rene-r ? 它给出了证书,您在代码中提取密钥,但很容易替换。

/// <summary>
/// Export a certificate to a PEM format string
/// </summary>
/// <param name="cert">The certificate to export</param>
/// <returns>A PEM encoded string</returns>
private static string ExportToPem(X509Certificate cert)
{
    StringBuilder builder = new StringBuilder();
    builder.AppendLine("-----BEGIN CERTIFICATE-----");
    builder.AppendLine(Convert.ToBase64String(cert.Export(X509ContentType.Cert),Base64FormattingOptions.InsertLineBreaks));
    builder.AppendLine("-----END CERTIFICATE-----");

    return builder.ToString();
}
 类似资料:
  • 问题内容: 使用Websphere MQ 8.x,我们是较大环境中的一个应用程序,并且是某些数据接口的客户端。我们的应用程序是在WildFly 9上运行的Java EE应用程序,该应用程序使用资源适配器()与EAR文件一起部署在同一AS中。我们在两个方向上与MQ服务器进行交互。因此,一方面,我们有一些MDB(由于历史渊源仍是EJB 2.x格式而没有注释)列出了一些队列,并由包含激活配置属性的部署描

  • 问题内容: 我正在尝试确保通过Internet进行通信的Java客户端/服务器应用程序的连接安全。我的想法是将SSL套接字与自签名证书和客户端身份验证一起使用。我做了以下事情: 服务器:包含新的自签名证书的密钥库。 客户端:包含新的自签名证书的密钥库。 服务器:包含导出的客户端证书的信任库(来自上面的项目符号)。导出客户端证书并将其导入服务器的信任库 客户端:包含导出的服务器证书的信任库(从第一个

  • null 有人能帮帮我吗?谢谢。 代码 斯塔克特莱斯

  • 问题内容: 我正在使用Java 6,并尝试使用客户端证书针对远程服务器创建一个。 服务器正在使用自签名的根证书,并且要求提供受密码保护的客户端证书。我已将服务器根证书和客户端证书添加到在中找到的默认Java密钥库中。密钥库文件的名称似乎表明不应将客户端证书放入其中? 无论如何,将根证书添加到此存储解决了臭名昭著的问题 但是,我现在停留在如何使用客户端证书上。我尝试了两种方法,但都无济于事。 首先,

  • 问题内容: 这不是设计上应该发生的事情,但是出于安全考虑,我想知道,如果有多个证书与某个CA签署的要求相匹配,那么如何将“正确的”证书发送到服务器? 我正在使用一个简单的SSL JAVA示例客户端,连接到Apache HTTPD。 我尝试用4个证书进行测试,每次删除选择的证书,并记下下一个是谁。除了证书的“ sha256”的词典顺序之外,我找不到合理的逻辑(即日期,别名等)。在我看来这不太可能…

  • 我想写一些可以枚举和使用(签名)证书在货币用户/我和LocalMachine/我,但我还没有能够找到任何Windows证书存储,只有Java自己的秘密存储。这个链接看起来很有希望,但我只能使用Java。 我以前在SO上发现过这个问题,但这是五年前的问题,在计算机时代是很长的时间了。谢谢!