using Grpc.Core; using System; using System.Threading.Tasks; using ServicesCloudConfig; using Grpc.Net.Client; using System.Security.Cryptography.X509Certificates; using System.IO; using System.Text; namespace client { class Program { static async Task Main(string[] args) { Console.WriteLine("Iniciando cliente canal inseguro . . ."); Channel insecurechannel = new Channel("127.0.0.1", 50051, ChannelCredentials.Insecure); await insecurechannel.ConnectAsync().ContinueWith((task) => { if (task.Status == TaskStatus.RanToCompletion) { Console.WriteLine("Cliente conectado satisfactoriamente"); } }); var insecureclient = new servicesCloudConfigService.servicesCloudConfigServiceClient(insecurechannel); try { var response = insecureclient.getProductType(new ProductTypeRequest() { IdProductType = "" }); Console.WriteLine(response.Response.ToString()); } catch (RpcException ex) { Console.WriteLine(ex.Status.Detail); } insecurechannel.ShutdownAsync().Wait(); Console.WriteLine("Fin cliente canal inseguro . . ."); Console.WriteLine("Iniciando cliente canal seguro . . ."); //Console.WriteLine("Iniciando cliente, cargando certificados . . ."); /*X509Certificate2 certificatePem = X509Certificate2.Import(File.ReadAllText(@"server.pem")); string privateKeyPem = File.ReadAllText(@"server.key");*/ //var cert = X509Certificate2.CreateFromPem(certificatePem, privateKeyPem); //var cert = X509Certificate2.Import(certificatePem); /* X509Certificate2 x509 = new X509Certificate2(); //Create X509Certificate2 object from .cer file. string certPem = File.ReadAllText(@"server.pem"); //byte[] rawData = Encoding.UTF8.GetBytes(certPem); byte[] rawData = File.ReadAllBytes(@"server.pem"); x509.Import(rawData); */ /* var x509 = new X509Certificate2(File.ReadAllBytes(@"server.pem")); //Console.WriteLine(cert); */ var HttpClientHandler = new HttpClientHandler(); HttpClientHandler.ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator; //HttpClientHandler.ClientCertificates.Add(x509);*/ var rootCert = File.ReadAllText(@"ca.pem"); var keyCertPair = new KeyCertificatePair( File.ReadAllText(@"server.pem"), File.ReadAllText(@"server.key")); //var serverCredentials = new SslServerCredentials(new[] { keyCertPair }, rootCert, true); var clientCredentials = new SslCredentials(rootCert, keyCertPair); var options = new List { new ChannelOption(ChannelOptions.PrimaryUserAgentString, "ABCDEF") }; /*var channel = new Channel("127.0.0.1", 8443, clientCredentials); var client = new servicesCloudConfigService.servicesCloudConfigServiceClient(channel);*/ /*using HttpClient httpClient = new(HttpClientHandler); using var channel = GrpcChannel.ForAddress("https://127.0.0.1:8443", new GrpcChannelOptions { HttpClient = httpClient, Credentials = clientCredentials }); var client = new servicesCloudConfigService.servicesCloudConfigServiceClient(channel);*/ //Console.WriteLine("Iniciando conexion a servidor ..."); var securechannel = new Channel("localhost", 8443, clientCredentials); await securechannel.ConnectAsync().ContinueWith((task) => { if (task.Status == TaskStatus.RanToCompletion) { Console.WriteLine("Cliente conectado satisfactoriamente"); } }); var client = new servicesCloudConfigService.servicesCloudConfigServiceClient(securechannel); //Timer de 1 segundo, para que esperar a que inice servidor. Solo para pruebas locales. System.Threading.Thread.Sleep(1000); try { var response = client.getProductType(new ProductTypeRequest() { IdProductType = "" }); Console.WriteLine(response.Response.ToString()); } catch (RpcException ex) { Console.WriteLine(ex.Status.Detail); } //channel.ShutdownAsync().Wait(); securechannel.ShutdownAsync().Wait(); Console.WriteLine("Fin cliente canal seguro . . ."); } } }