@_az Hi, thanks for answer.
public class AcmeHelper
{
private static Logger logger = LogManager.GetCurrentClassLogger();
public static async Task<X509Certificate2> GenerateCert(string dns)
{
AcmeHost challengeResponder = null;
try
{
//Checking port
if (NetworkingHelper.IsPortInUse(80))
{
throw new Exception("Port 80 is currently in use, cannot start the ACME challenge responder. Certificate request will be canceled");
}
#if DEBUG
logger.Warn("Running in debug mode, will use the LetsEncrypt Staging server!");
Uri letsEncryptUri = WellKnownServers.LetsEncryptStagingV2;
#else
Uri letsEncryptUri = WellKnownServers.LetsEncryptV2;
#endif
{
var acme = new AcmeContext(letsEncryptUri);
var account = await acme.NewAccount("mlopesbjj@gmail.com", true);
var tos = acme.TermsOfService();
var order = await acme.NewOrder(new[] { dns });
var authz = (await order.Authorizations()).First();
var httpChallenge = await authz.Http();
var keyAuthz = httpChallenge.KeyAuthz;
var token = httpChallenge.Token;
challengeResponder = new AcmeHost(token, dns);
try
{
challengeResponder.StartWebApiHost();
AcmeResponderController.KeyAuthorization = keyAuthz;
}
catch (Exception ex)
{
logger.Error(ex, "Error while starting the ACME responder service, canceling certificare request");
try { challengeResponder.StopWebApiHost(); } catch { }
throw;
}
await httpChallenge.Validate();
logger.Info("11 - httpChallenge: " + httpChallenge.Location);
var res = await authz.Resource();
logger.Info("12 - res: " + res);
var privateKey = KeyFactory.NewKey(KeyAlgorithm.RS256);
var cert = await order.Generate(new CsrInfo
{
CommonName = dns,
}, privateKey);
return x509cert;
}
}
catch (Exception ex)
{
logger.Error(ex, "An exception occurred while requesting certificates: " + ex.Message);
throw ex;
}
finally
{
//Close the web api responder
try { challengeResponder.StopWebApiHost(); } catch { }
}
}
}