Zum Inhalt

Unter Windows

In diesem Kapitel beschreiben wir beispielhaft die Installation von RESTCaptcha unter Windows Server 2025 mit IIS 10 als Hosting-Umgebung. Wir arbeiten dabei ausschließlich mit PowerShell.

Installation IIS

Öffne die PowerShell als Administrator und überprüfe, ob IIS 10 bereits installiert ist:

Get-WindowsFeature -Name Web-Server, Web-Scripting-Tools

Sieht das Ergebnis wie folgt aus, musst Du nichts weiter machen und kannst gleich zum nächsten Abschnitt "Installation ASP.NET" springen:

Display Name                                            Name                       Install State
------------                                            ----                       -------------
[X] Web Server (IIS)                                    Web-Server                     Installed
        [X] IIS Management Scripts and Tools            Web-Scripting-Tools            Installed

Sollte da irgendwo ein Kreuzer fehlen, musst Du die Windows-Features nachinstallieren:

Install-WindowsFeature -Name Web-Server, Web-Scripting-Tools

Teste anschließend, ob Du lokal die Standardwebseite von IIS 10 aufrufen kannst:

Invoke-WebRequest -Uri "http://localhost" -UseBasicParsing

IIS-Standardwebseite

Die Standardwebseite von IIS 10 wird für RESTCaptcha nicht benötigt. Du kannst und solltest sie deaktivieren:

Import-Module WebAdministration
Stop-Website -Name "Default Web Site"
Set-ItemProperty "IIS:\Sites\Default Web Site" serverAutoStart False

Installation ASP.NET

RESTCaptcha benötigt das ASP.NET-Framework als Abhängigkeit.

Öffne die PowerShell als Administrator und tippe folgenden Befehl ein, um das ASP.NET Core 9.0 Runtime - Windows Hosting Bundle zu installieren:

winget install --id=Microsoft.DotNet.HostingBundle.9 -e --accept-package-agreements --accept-source-agreements

Installation RESTCaptcha

Binaries kopieren

Lege einen neuen Ordner für RESTCaptcha (Beispiel: C:\Sites\RestCaptcha) an und kopiere die Binaries des aktuellen Release dort hinein. Der folgende PowerShell-One-Liner macht das für Dich:

$r=Invoke-RestMethod "https://api.github.com/repos/openpotato/restcaptcha/releases/latest" -Headers @{ "User-Agent"="PS" };$a=$r.assets|?{ $_.name -like "*.zip"}|select -f 1;$zip="$env:TEMP\$($a.name)";Invoke-WebRequest $a.browser_download_url -OutFile $zip -Headers @{ "User-Agent"="PS" };Expand-Archive $zip -DestinationPath "C:\Sites\RestCaptcha" -Force;Remove-Item $zip

Kopiere in diesem Ordner die Datei appsettings.json und nenne sie appsettings.Production.json:

Copy-Item C:\Sites\RestCaptcha\appsettings.json C:\Sites\RestCaptcha\appsettings.Production.json

Ändere den Inhalt von appsettings.Production.json wie folgt ab:

{
  "Serilog": {
    "Using": [
      "Serilog.Sinks.Console",
      "Serilog.Sinks.File"
    ],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft.AspNetCore": "Warning",
        "Microsoft.AspNetCore.Hosting.Diagnostics": "Warning",
        "Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware": "Information"
      }
    },
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": {
          "path": "c:\\Sites\\RestCaptcha\\logs\\log-.txt",
          "rollingInterval": "Day",
          "retainedFileCountLimit": 7,
          "fileSizeLimitBytes": 10000000,
          "rollOnFileSizeLimit": true
        }
      }
    ]
  },
  "RestCaptcha": {
    "Sites": [
      {
        "name": "Meine Site",
        "description": "Meine Site, die RESTCaptcha nutzt",
        "siteKey": "Mein-Site-Schlüssel",
        "siteSecret": "AeyGWx3kQeyrDFCE5KDR",
        "validHostNames": []
      }
    ]
  }
}

Eine neue IIS Site anlegen

Zunächst laden wir das IISS Management Module in unsere PowerShell-Session:

Import-Module WebAdministration

Dann erstellen wir einen passenden IIS App Pool für unseren ASP.NET-Dienst und konfigurieren ihn:

New-WebAppPool -Name "AspNetCorePool"
Set-ItemProperty "IIS:\AppPools\AspNetCorePool" -Name managedRuntimeVersion -Value ""
Set-ItemProperty "IIS:\AppPools\AspNetCorePool" -Name enable32BitAppOnWin64 -Value False

Dann erstellen wir eine neue IIS Site, die auf unseren RESTCaptcha-Ordner C:\Sites\RestCaptcha verweist:

New-Item "IIS:\Sites\RestCaptcha" `
   -bindings @(
     @{protocol="http";  bindingInformation="*:8080:"},
     @{protocol="https"; bindingInformation="*:443:captcha.beispiel.de"}
   ) `
   -physicalPath "C:\Sites\RestCaptcha"
Set-ItemProperty "IIS:\Sites\RestCaptcha" -Name applicationPool -Value "AspNetCorePool"

Wir haben jetzt zwei Bindungen, eine lokale http-Bindung auf Port 8080 und eine öffentliche https-Bindung auf Port 443.

Lege im Ordner C:\Sites\RestCaptcha eine neue Datei mit Namen web.config an und kopiere folgenden XML-Code hinein:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet"
                arguments=".\RestCaptcha.WebService.dll"
                stdoutLogEnabled="false"
                stdoutLogFile=".\logs\stdout"
                hostingModel="inprocess">
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>

Die Datei web.config konfiguriert das Hosting von RESTCaptcha als ASP.NET-Applikation, also die Art und Weise, wie einkommende Anfragen an RESTCaptcha weitergeleitet werden. In unserem Fall läuft RESTCaptcha innerhalb des IIS-Arbeitsprozesses (in-process hosting model).

Wir sind mit der Basiskonfiguration fertig. Starte Deine IIS-Site neu:

Restart-WebAppPool "AspNetCorePool"; 
Restart-WebItem "IIS:\Sites\RestCaptcha"

Der folgende lokale Test ruft den Health-Endpunkt von RESTCaptcha auf und sollte erfolgreich sein:

Invoke-WebRequest -Uri "http://localhost:8080/health" -UseBasicParsing

Für einen öffentlichen Test fehlt noch ein TLS-Zertifikat für unsere https-Bindung. Eine gute Möglichkeit ist die Nutzung von Let's Encrypt zum Erstellen von kostenlosne TLS-Zertifikaten.

Du musst dafür einen ACME-Client installieren. Einer der besten Clients für Windows ist simple-acme. Installiere ihn, starte die Kommandozeilenanwendung. Sind alle Fragen beantwortet, kommuniziert simple-acme mit Let’s Encrypt und erfragt ein TLS-Zertifikat für die Domäne captcha.beispiel.de.

Ein Test in einem Web-Browser mit https://captcha.beispiel.de/health sollte jetzt erfolgreich funktionieren.

Let’s Encrypt und IIS 10

Eine ausführliche Einführung in das Thema findest Du in folgendem Blog-Post: HTTPS unter IIS 10.