Usually the bigger problem is getting exclusive access to port 443, which is one of the reasons we don't implement it in Certify The Web.
Personally I would suggest that you should either use a certificate provided to you by the client (pulling it from a keyvault etc) or use DNS validation via a CNAME to a domain you control, and make your DNS challenge updates there. There are other options like acme-dns.
Alternatively, simply convince the client to open port 80 (you can be the only listener, and only during validation) - there is a sense that port 80 itself is a security problem but it's just a number after all, the real security is more around what's listening on the port.
Yes, I totally agree that is unnecessary. And that port 80 is totally fine. However, this is a government client which doesn't want port 80 open. And I can't do anything about it. I also don't have access to their DNS, so I cannot use that option either.
Pro-tip: the dns-01 challenge is also possible using DNS "redirection" using e.g. CNAME or NS resource records, which would only require a one-time zone modification.
This (in the Certes library you are using) retrieves the TlsAlpn challenge information, it does not perform the challenge response.
What's supposed to happen with an acme challenge is that you decide which challenge you want to complete for each identifier (domain), then you setup whatever is necessary on your side to complete that challenge, then you tell the acme CA that you're ready for them to check your answer. If you complete a challenge for the domains on your order you can then proceed to finalizing your certificate request and download your certificate.
You are currently doing nothing that would actually answer the challenge (e.g. set up something to listen on port 443 and perform the necessary TLS coversation to satisfy tls-alpn-01, which the example code I linked to does.
I would suggest you perhaps use win-acme directly to acquire your certificate.
Yes, but that could be a one-time thing only, redirecting the _acme-challenge label to a DNS server under your own control. Once the CNAME or NS redirection is in place, all the recurring adding/removing of the TXT RRs for the challenge could be done on that DNS server under your control. For example, acme-dns is a popular (?) solution for this problem.
This is on windows and I assume IIS is present, if you were going to switch web server then caddy would make more sense because it can do tls-alpn-01 automatically.