# Let's Encrypt, GoDadday DNS and IIS server

#### Last modified: 2019/07/11,6a40e30

Categories: infrastructure

I wanted to create a new SSL certificate for IIS hosted ASP.NET framework application. The key data that may make this post relevant to you are:

• Let’s Encrypt Challenge mode: DNS TXT record
• DNS provider: GoDaddy
• Target web server: IIS
• Target operating system: Windows
• Local operating environment/system: Linux (including Windows Subsystem for Linux).

# Why I chose certbot?

I decided to use certbot since it allowed me do create the DNS TXT entries manually. This was the first time I was doing this and I just wanted to get an idea of what’s involved. To me it seemed like a two step approach:

• Place a request to Let’s Encrypt for a SSL certification for a domain
• Validate via DNS challenge that I own the domain

I wanted to do the second step manually.

Two other projects I looked at were lego and win-acme. While writing this post, I found out that lego has inbuilt support for godadday DNS, so I could have used it to create the DNS TXT record automatically. However, it didn’t seem to have the “manual” mode I was after. win-acme needed hooks to be provided for the DNS challenge, which seemed like another thing to do at the moment - meaning, writing the hooks.

# Generating the certificate

Once you have installed certbot:

$certbot certonly --manual --preferred-challenges dns -d <your domain> --config-dir . --logs-dir . --work-dir .  The program will pause displaying: Please deploy a DNS TXT record under the name _acme-challenge.<your domain> with the following value: random$string
Before continuing, verify the record is deployed.


Now, go to your GoDaddy DNS management page, and create the TXT record with the specified string. Be sure not to enter the entire domain name as the record if you are doing this for a sub-domain. For example, if you are doing this for api.<your-domain>, the record should just be _acme-challenge.api.

Once you have verified that the domain entry has propagated, press ENTER to continue. To verify, use nslookup -q=TXT <domain> on Windows, or dig -t on Linux.

Once the record has propagated, certbot will try to find it, and if successful continue and eventually give an output like this:

IMPORTANT NOTES:

- Congratulations! Your certificate and chain have been saved at:
/home/asaha/letsencrypt/live/<your domain>/fullchain.pem
Your key file has been saved at:
/home/asaha/letsencrypt/live/<your domain>/privkey.pem
...


# Importing into IIS

The directory created will have a bunch of files. We will next create a .pfx file for importing into IIS using openssl:

\$ openssl pkcs12 -export -out certificate.pfx -inkey privkey.pem -in cert.pem -certfile chain.pem
Enter Export Password:
Verifying - Enter Export Password:


The resultant file will be certificate.pfx. Now, copy the certificate.pfx file to the target IIS box and import it using this handy guide.

# Using with traefik

If you are generating the certificates manually for traefik reverse proxy, the cert.pem file is the public certificate and the privkey.pem file is the private key.

# Automating

The next step is to attempt to automate the certificate generation process using lego and perhaps some Powershell glue to import the certificate and change/setup IIS site binding with the new certificate.