Подтверждение сертификата с. Net core 3.1 - PullRequest
0 голосов
/ 20 марта 2020

Я хочу проверить сертификат клиента на стороне сервера, который написан на. net core 3.1.

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseContentRoot(Directory.GetCurrentDirectory());
                webBuilder.UseIISIntegration();
                webBuilder.ConfigureKestrel((context,options) =>
                {
                    var authority = new X509Certificate2("ca-crt.pem", "XXXXXX");
                    options.ConfigureHttpsDefaults(httpsOptions =>
                    {
                        httpsOptions.ServerCertificate = authority;
                        httpsOptions.ClientCertificateMode = ClientCertificateMode.RequireCertificate;
                        httpsOptions.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;
                        httpsOptions.ClientCertificateValidation = (certificate2, chain, policyErrors) =>
                        {
                            chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;
                            chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllowUnknownCertificateAuthority;
                            chain.ChainPolicy.ExtraStore.Add(authority);
                            var valid = chain.Build(certificate2);
                            if (!valid)
                                return false;
                            valid = chain.ChainElements
                                .Cast<X509ChainElement>()
                                .Any(x => x.Certificate.Thumbprint == authority.Thumbprint);
                            return valid;
                        };
                    });
                });
                webBuilder.UseStartup<Startup>();
            });

, а мой клиент написан с библиотекой node.

  const optionSecureContext = {
    key: fs.readFileSync('client1-key.pem'),
    cert: fs.readFileSync('client1-crt.pem'),
    ca: fs.readFileSync('ca-crt.pem'),
    minVersion: "TLSv1.2",
    maxVersion: "TLSv1.2"
  }
  const secureContext = tls.createSecureContext(optionSecureContext);
  const options = {
    host: "::1",
    port: "44355",
    secureContext: secureContext,
    rejectUnauthorized: false
  };
  const socket = tls.connect(options, () => {
    console.log('client connected',
                socket.authorized ? 'authorized' : 'unauthorized');
    process.stdin.pipe(socket);
    process.stdin.resume();
  });
  socket.setEncoding('utf8');
  socket.on('data', (data) => {
    console.log(data);
  });
  socket.on('end', () => {
    console.log('server ends connection');

с этим кодом, я получаю эту ошибку

enter image description here

и Wireshark отображает мне это:

enter image description here

Может ли кто-нибудь направить меня на правильный путь?

...