Unauthorized Error - what is the expected response from the certbot challenge?

Hi @ashrielbrian

checking your domain, perhaps you see the solution ( https://check-your-website.server-daten.de/?q=abel.works ):

Domainname Http-Status redirect Sec. G
http://abel.works/
18.139.60.107 200 0.727 H
http://www.abel.works/
18.139.60.107 200 0.700 H
https://abel.works/
18.139.60.107 -14 10.027 T
Timeout - The operation has timed out
https://www.abel.works/
18.139.60.107 -14 10.027 T
Timeout - The operation has timed out
abel.works
18.139.60.107 200 0.700
Visible Content: .
 </app-root>|

http + / works. https not, but that's not relevant. But /.well-known/acme-challenge sends a lot of content.

Info: Html-Content with meta and/or script, may be a problem creating a Letsencrypt certificate using http-01 validation

<!doctype html> <html lang="en"> <head> <base href="/"> <meta charset="utf-8"> <title>Timetable Angular</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- reduced for brevity --> <!-- inline spinner styles to be able to display spinner right away --> <style type="text/css"> body, html { height: 100%; } .app-loading { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; } .app-loading .spinner { height: 200px; width: 200px; animation: rotate 2s linear infinite; transform-origin: center center; position: absolute; top: 0; bottom: 0; left: 0; right: 0; margin: auto; } .app-loading .spinner .path { stroke-dasharray: 1, 200; stroke-dashoffset: 0; animation: dash 1.5s ease-in-out infinite; stroke-linecap: round; stroke: #ddd; } @keyframes rotate { 100% { transform: rotate(360deg); } } @keyframes dash { 0% { stroke-dasharray: 1, 200; stroke-dashoffset: 0; } 50% { stroke-dasharray: 89, 200; stroke-dashoffset: -35px; } 100% { stroke-dasharray: 89, 200; stroke-dashoffset: -124px; } } </style> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-141134302-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-141134302-1', { 'send_page_view': false }); </script> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <link href="https://fonts.googleapis.com/css?family=Roboto|Roboto+Condensed" rel="stylesheet"> <link rel="stylesheet" href="https://use.typekit.net/fij5jri.css"> <!-- For code-saver font --> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.1/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous"> <link rel="icon" type="image/x-icon" href="favicon.ico"> <link rel="stylesheet" href="styles.1aadc07444dcd975815c.css"></head> <body> <app-root>. <!-- loading layout replaced by app after startupp --> <div class="app-loading"> <!-- Style logo inside div below, .logo --> <div class="logo"></div> <svg class="spinner" viewBox="25 25 50 50"> <circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"/> </svg> </div> </app-root> <script type="text/javascript" src="runtime.f4976e9fdf54f6f84c4f.js"></script><script type="text/javascript" src="polyfills.73595e80ac16f6619f1b.js"></script><script type="text/javascript" src="scripts.d871263a2df3baf77f0a.js"></script><script type="text/javascript" src="main.c9a7ab40cf65ee5153e4.js"></script></body> </html> 

You have a nginx. There should be a root definition. Is it possible to create an exception, so that path /.well-known/acme-challenge isn't answered by your app?

Then use that root.

certbot run -a webroot certonly -w yourRoot -d abel.works