QUIC und SMB

Die Vorteile von QUIC können nicht nur über HTTP sondern auch bei anderen Protokollen genutzt werden. Besonders interessant ist hierbei SMB, das "Datei Sharing Protokoll" von Microsoft. Seit aufgrund von COVID19 sehr viele Mitarbeiter im Homeoffice aktiv sind und ein VPN nutzen. VPNs nutzen aber entweder UDP, TCP oder HTTPS und dann wird SMB over VPN nicht so performant laufen, wie es eigentlich möglich ist. SMB over QUIC soll hier eine deutliche Verbesserung versprechen.

Client und Server

SMB over QUIC ist nichts, was noch für Windows 10 Clients oder älter und Windows Server 2019 und früher kommt. Um SMB over QUIC nutzen zu können, sollte es schon Windows 2025 Server oder Windows 2022 in Azure sein. Als Client ist Windows 11 Mindestvorrausetzung.

Applies to: Windows Server 2025, Windows Server 2022 Datacenter: Azure Edition, Windows 11 or later
Quelle: SMB over QUIC https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-over-quic

Den aktuellen Status der lokalen Konfiguration können sie sehr einfach per PowerShell in Erfahrung bringen:

Das sind meine Standardwerte eines Windows 11 23H2 (Build 22631.4169) Desktops.

Allerdings bedeutet dies nicht, dass SMB auch funktioniert. Auf dem Client können Sie z.B. QUIC ein und ausschalten. Aber auf dem Windows 11 23H2 (Build 22631.4169) funktioniert dies noch nicht.

Set-SmbClientConfiguration -EnableSMBQUIC $false

Da sind einige Commandlets schon weiter als das darunterliegende System.

SMB mit QUIC konfigurieren

Au anderen Seiten haben Sie hoffentlich schon gelesen, dass QUIC immer eine Verschlüsselung mit TLS 1.3 erfordert. Wir benötigen daher auf jedem SMB-Serer, der auch per QUIC erreichbar sein soll, zum einen ein passendes vertrauenswürdiges Zertifikat und die passenden Cipher Suites.

Achtung: Die Nutzung mit "Self Signed Certificates" ist für ein geschlossenes Testfeld in Ordnung aber in der Produktion sollten Sie immer PKI-Zertifikate nutzen.
Speziell wenn Sie später auch noch mit Client Zertifikaten arbeiten, skalieren selbst erstellte Zertifikate nicht mehr.

Auf dem Server fordern wir ein Zertifikat an und binden es an den SMB-Service.

$QUICCert = New-SelfSignedCertificate `
                 -DnsName "server.msxfaq.de" `
                 -CertStoreLocation "Cert:\LocalMachine\My"  `
                 -NotAfter (Get-Date).AddMonths(12) `
                 -KeyAlgorithm "RSA"  `
                 -KeyLength "2048"

New-SmbServerCertificateMapping `
   -Name "server.msxfaq.de" `
   -Thumbprint $QUICCert.Thumbprint `
   -Store My `
   -Requireclientauthentication $true

Kontrollieren Sie danach, dass der Server auch auf UDP/445 lauscht:

PS C:\> Get-NetUDPEndpoint -LocalPort 445

Bilder und Mitschnitte reichte ich nach

SMB Verbindung mit QUIC

Eine Verbindung vom Client zum Server können Sie sowohl per CMD-Shell (NET USE) als auch PowerShell (New-SMBMapping) einrichten.

NET USE * \\server.msxfaq.de\test /TRANSPORT:QUIC
New-SMBMapping `
   -LocalPath 'N:' `
   -RemotePath '\\server.msxfaq.de\test' `
   -TransportType QUIC

Allerdings werden beide Befehle aktuell immer noch TCP bevorzugen und auch nicht selbst im Hintergrund eine QUIC-Verbindung versuchen und dann wechseln. Anscheinend traut Microsoft hier noch nicht den verschiedenen Übertragungsnetzwerken.


Quelle: New-SMBMapping https://learn.microsoft.com/en-us/powershell/module/smbshare/new-smbmapping

Sie müssen also explizit QUIC als Transportprotokolle angegeben. Ich könnte mir aber vorstellen, dass Sie dies in zukünftigen Versionen des SMBClient auch einmal ändert. Browser wissen ja auch damit umzugehen, dass Sie mit TCP starten und bei erfolgreicher QUIC-Verbindung dann umsteigen. Allerdings gibt es schon erste Quellen, die genau das behaupten:

The client attempts to connect using TCP/IP [4] and QUIC [5] in parallel. That is because the client does not know if the server supports QUIC, TCP, or both. As a result, the client needs to attempt both. At the moment, TCP gets a slight head start to establish the connection. Doing so provides the best experience for people inside the corporate network while still offering transparent QUIC connectivity when the users are not.
Quelle: https://www.starwindsoftware.com/blog/smb-over-quic-testing-guide-part-1/

Weitere Analysen stehen hier aber noch aus.

SMB, QUIC und Client Zertifikate (QUIC CAC)

Während klassisches SMB sich per NTLM, Kerberos o.ä. anmelden, eröffnet sich mit QUIC und der Nutzung von TLS auch die Authentifizierung per MTLS.

Diese Funktion war im Sep 2024 noch "Preview" und auf Insider-Versionen beschränkt.

Dazu muss natürlich der Client auch ein Computerzertifikat bekommen, welchem der SMB-Server vertraut. Mit einem "Self Signed Zertifikat" sollten Sie so eine Konfiguration nicht betreiben, denn dann müssten sie ja alle Client-Zertifikate auf dem Server als "vertrauenswürdig" installieren. Für eine Demonstration der Funktion in einem Testfeld kann dies aber schon nützlich sein.  Voraussetzung ist natürlich, dass der Client schon dem Zertifikat auf dem QUIC-Server vertraut.

#Erstellen eines CLient Zertifikats
$QUICclientCert = New-SelfSignedCertificate `
                     -DnsName client1.msxfaq.de `
                     -CertStoreLocation "Cert:\LocalMachine\My" `
                     -NotAfter (Get-Date).AddMonths(12) `
                     -KeyAlgorithm "RSA" `
                     -KeyLength "2048"

# Zuordnen an den SMB QUIC Client
New-SmbClientCertificateMapping `
   -Namespace client1.msxfaq.de `
   -Thumbprint $QUICclientCert.Thumbprint `
   -Store My

# Export des SelfSigned zum Import auf dem Server
Export-Certificate `
   -Cert $QUICclientCert `
   -FilePath path\clientCert.cer

Bei einem SelfSigned Zertifikat müssen Sie es nun auf dem Server als "trusted" addieren. Wurde das Zertifikat von ihrer internen PKI ausgestellt, der ihr SMB-Server vertraut, dann können Sie sich diesen Schritt sparen. Sie müssen auf dem Server aber den Thumbprint des Zertifikats einspielen:

Grant-SmbClientAccessToServer `
   -Name Server DNS name `
   -IdentifierType SHA256 `
   -Identifier <Hash(sha256) des Zertifikats>

Bilder mit der RTM-Version folgen.

Weitere Links