从 Ubuntu 中的其他 C# 服务访问自签名 HTTPS C# 服务

Access a Self signed HTTPS C# service from other C# service in Ubuntu

我 运行 我本地 testing.I 的自签名 (HTTPS) C# Web 服务器无法从 运行 进入的其他 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# application.My 系统得到同样的错误 OS is ubuntu 16.04

你需要 3 个 cert/private_key 1_root 2_intermediate 3_application

你的APP的3_application(不要忘记为主机和IP生成正确的cname/alias)

以及 public root 和 intermediate(CA) 的部分 add/installed 在 运行 第二个 APP

的系统上

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

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;
}