using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading; using System.Threading.Tasks; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using ACMEv2; using FS = System.IO; namespace LetsEncrypt { class Program { static void Main(string[] args) { // save to http:///.well-known/acme-challenge/ var tokensPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ".well-known/acme-challenge"); if (!FS.Directory.Exists(tokensPath)) FS.Directory.CreateDirectory(tokensPath); foreach (FileInfo file in new DirectoryInfo(tokensPath).GetFiles()) file.Delete(); var certsPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "certs"); if (!FS.Directory.Exists(certsPath)) FS.Directory.CreateDirectory(certsPath); List contacts = new List(); contacts.Add("maksym.sadovnychyy@gmail.com"); List hosts = new List(); hosts.Add("maks-it.com"); hosts.Add("www.maks-it.com"); Console.WriteLine("Let's Encrypt C# .Net Core Client"); try { LetsEncryptClient client = new LetsEncryptClient(LetsEncryptClient.StagingV2, AppDomain.CurrentDomain.BaseDirectory); Console.WriteLine("1. Client Initialization..."); // 1 client.Init(contacts.ToArray()).Wait(); Console.WriteLine(string.Format("Terms of service: {0}",client.GetTermsOfServiceUri())); client.NewNonce().Wait(); // 2 try { Console.WriteLine("2. Client New Order..."); Task> orders = client.NewOrder(hosts.ToArray(), "http-01"); orders.Wait(); foreach (var result in orders.Result) { Console.WriteLine("Key: " + result.Key + Environment.NewLine + "Value: " + result.Value); string[] splitToken = result.Value.Split('~'); File.WriteAllText(FS.Path.Combine(tokensPath, splitToken[0]), splitToken[1]); } // 3 Console.WriteLine("3. Client Complete Challange..."); client.CompleteChallenges().Wait(); Console.WriteLine("Challanges comleted."); } catch (Exception ex) { Console.WriteLine(ex.Message.ToString()); client.GetOrder(hosts.ToArray()).Wait(); } // 4 Download certificate Console.WriteLine("4. Download certificate..."); Task<(X509Certificate2 Cert, RSA PrivateKey)> certificate = client.GetCertificate(); certificate.Wait(); File.WriteAllText(Path.Combine(certsPath, "maks-it.com.crt"), Library.ExportToPEM(certificate.Result.Cert)); Console.WriteLine("Certificate saved."); } catch (Exception ex) { Console.WriteLine(ex.Message.ToString()); } Console.Read(); } } }