【问题标题】:Access a Self signed HTTPS C# service from other C# service in Ubuntu从 Ubuntu 中的其他 C# 服务访问自签名 HTTPS C# 服务
【发布时间】:2019-10-08 17:16:45
【问题描述】:

我为本地测试运行了一个自签名 (HTTPS) C# Web 服务器。我无法从在同一台 PC 中运行的其他 c# 应用程序访问此 C# application-1。其他应用程序显示错误

System.Net.Http.HttpRequestException:
System.Net.Http.CurlException: Peer certificate cannot be authenticated with given CA certificates

我的证书没有由 CA 签名。但我只在我的系统中运行我的应用程序。我还使用以下命令将我的证书添加到受信任的 CA 根存储中

certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n "localhost" -i localhost.crt

但第二个 c# 应用程序仍然出现同样的错误。我的系统操作系统是 ubuntu 16.04

【问题讨论】:

    标签: c# ssl https .net-core libcurl


    【解决方案1】:

    HttpHandler 有一个 ServerCertificateCustomValidationCallback,您可以覆盖它来执行自定义证书验证。

    private HttpClient CustomHttpClient()
    {
        return new HttpClient(
            new HttpClientHandler
            {
                ServerCertificateCustomValidationCallback = cert_validation,
            }); 
    }
    
    private bool cert_validation(HttpRequestMessage reqMsg, X509Certificate2 cert, X509Chain certChain, SslPolicyErrors policyErrors)
    {
        //custom validation
        return true;
    }
    

    【讨论】:

      【解决方案2】:

      您需要 3 个证书/private_key 1_root 2_中级 3_应用程序

      3_application 到您的应用程序(不要忘记为主机和 IP 生成正确的 cname/alias)

      并且在运行第二个APP的系统上添加/安装根和中间(CA)的公共部分

      这个脚本应该有帮助 https://github.com/nicholasjackson/mtls-go-example/blob/master/generate.sh

      【讨论】:

      猜你喜欢
      • 2018-03-18
      • 2014-10-23
      • 1970-01-01
      • 2020-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多