# RDP-Dateien unter Ubuntu signieren

Erstellt mit Unterstützung von ChatGPT

## Allgemein

Ich nutzte diese Lösung um unter Ubuntu RDP-Dateien zu signieren.

## 1. Pakete auf Ubuntu installieren

```
sudo apt update && sudo apt install -y openssl curl python3
```

<div class="relative w-full mt-4 mb-1" id="bkmrk-"></div>Das Linux-Tool installieren:

```
sudo curl -L https://raw.githubusercontent.com/nfedera/rdpsign/master/rdpsign.py -o /usr/local/bin/rdpsign && sudo chmod +x /usr/local/bin/rdpsign
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--2"></div>Das Tool nutzt laut README Python und OpenSSL; der Beispielaufruf ist `rdpsign test.rdp test-signed.rdp signer.crt -k signer.key`.

## 2. Verzeichnisstruktur erstellen

```
sudo mkdir -p /opt/rdp-ca/{private,certs,csr,out}
sudo chmod 700 /opt/rdp-ca/private
cd /opt/rdp-ca
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--5"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative">  
</div></div></div></div></div></div></div></div>## 3. OpenSSL-Konfiguration für Root-CA erstellen

```
sudo tee /opt/rdp-ca/root-ca.cnf >/dev/null <<'EOF'
[ req ]
default_bits = 4096
prompt = no
default_md = sha256
distinguished_name = dn
x509_extensions = v3_ca

[ dn ]
C = DE
O = RDP Secure Access
CN = RDP Secure Access Root CA

[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, keyCertSign, cRLSign
EOF
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--8"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class=""><div class="relative z-0 flex max-w-full">  
</div></div></div></div></div></div></div><div class="">  
</div></div></div></div>## 4. Root-CA mit 10 Jahren Laufzeit erstellen

```
sudo openssl genrsa -out /opt/rdp-ca/private/rdp-secure-access-root-ca.key 4096
```

```
sudo openssl req -x509 -new -nodes -key /opt/rdp-ca/private/rdp-secure-access-root-ca.key -sha256 -days 3650 -out /opt/rdp-ca/certs/RDP-Secure-Access-Root-CA.cer -config /opt/rdp-ca/root-ca.cnf
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--13"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class=""><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--14"></div></div></div></div></div></div></div></div><div class="">  
</div></div></div></div>Die Datei, die du später den Windows-Usern gibst, ist:

```
/opt/rdp-ca/certs/RDP-Secure-Access-Root-CA.cer
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--15"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--16"></div></div></div></div></div></div></div></div><div class="">  
</div></div></div></div>Der private Key bleibt geheim:

```
/opt/rdp-ca/private/rdp-secure-access-root-ca.key
```

---

## 5. Konfiguration für das RDP-Signing-Zertifikat erstellen

Der sichtbare Name im Windows-Dialog kommt aus dem Zertifikat, daher setze ich hier:

```
CN = RDP Secure Access
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--20"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--21"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>```
sudo tee /opt/rdp-ca/rdp-signer.cnf >/dev/null <<'EOF'
[ req ]
default_bits = 4096
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = v3_req

[ dn ]
C = DE
O = RDP Secure Access
CN = RDP Secure Access

[ v3_req ]
basicConstraints = critical, CA:false
keyUsage = critical, digitalSignature
extendedKeyUsage = critical, codeSigning
subjectKeyIdentifier = hash
EOF
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--22"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class=""><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--23"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>Ein Code-Signing-EKU ist hier wichtig; mehrere aktuelle Anleitungen und Fehlerberichte weisen darauf hin, dass ein normales TLS-Zertifikat für `.rdp`-Dateisignatur nicht ausreicht und Code Signing als EKU benötigt wird.

---

## 6. RDP-Signing-Zertifikat mit 10 Jahren erstellen

```
sudo openssl genrsa -out /opt/rdp-ca/private/rdp-secure-access-signer.key 4096
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--25"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class=""><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--26"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>```
sudo openssl req -new -key /opt/rdp-ca/private/rdp-secure-access-signer.key -out /opt/rdp-ca/csr/rdp-secure-access-signer.csr -config /opt/rdp-ca/rdp-signer.cnf
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--27"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class=""><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--28"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>```
sudo openssl x509 -req -in /opt/rdp-ca/csr/rdp-secure-access-signer.csr -CA /opt/rdp-ca/certs/RDP-Secure-Access-Root-CA.cer -CAkey /opt/rdp-ca/private/rdp-secure-access-root-ca.key -CAcreateserial -out /opt/rdp-ca/certs/RDP-Secure-Access-Signer.cer -days 3650 -sha256 -extfile /opt/rdp-ca/rdp-signer.cnf -extensions v3_req
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--29"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class=""><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--30"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>---

## 7. Thumbprint für Registry-Datei ermitteln

Windows braucht den **SHA1-Thumbprint des Signer-Zertifikats**, nicht den Thumbprint der Root-CA.

```
openssl x509 -in /opt/rdp-ca/certs/RDP-Secure-Access-Signer.cer -noout -fingerprint -sha1 | cut -d= -f2 | tr -d ':'
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--32"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class=""><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--33"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>Beispielausgabe:

```
A1B2C3D4E5F60718293A4B5C6D7E8F9012345678
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--34"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--35"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>Diesen Wert brauchst du gleich in der `.reg`.

Microsofts Policy heißt **„Specify SHA1 thumbprints of certificates representing trusted .rdp publishers“**. Wenn ein `.rdp`-File mit einem Zertifikat signiert ist, dessen SHA1-Thumbprint in dieser Liste steht, soll der Benutzer beim Start keine Warnmeldung bekommen.

---

## 8. Beispiel-Registry-Datei für Windows-Clients

Auf Ubuntu erzeugen:

```
SIGNER_THUMBPRINT="$(openssl x509 -in /opt/rdp-ca/certs/RDP-Secure-Access-Signer.cer -noout -fingerprint -sha1 | cut -d= -f2 | tr -d ':')"
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--37"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class=""><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--38"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>```
sudo tee /opt/rdp-ca/out/RDP-Secure-Access-Client-Trust.reg >/dev/null <<EOF
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services]
"AllowSignedFiles"=dword:00000001
"TrustedCertThumbprints"="$SIGNER_THUMBPRINT"
EOF
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--39"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class=""><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--40"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>Die fertige Datei liegt dann hier:

```
/opt/rdp-ca/out/RDP-Secure-Access-Client-Trust.reg
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--41"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--42"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>Diese `.reg` muss auf dem Windows-Client **als Administrator** importiert werden.

Zusätzlich muss die Root-CA auf dem Client installiert werden:

```
RDP-Secure-Access-Root-CA.cer
→ Lokaler Computer
→ Vertrauenswürdige Stammzertifizierungsstellen
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--43"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--44"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>Optional kannst du auch das öffentliche Signer-Zertifikat mitgeben:

```
RDP-Secure-Access-Signer.cer
→ Lokaler Computer
→ Vertrauenswürdige Herausgeber
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--45"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--46"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>Der zentrale Punkt bleibt aber: Root-CA vertraut + Signer-Thumbprint in `TrustedCertThumbprints`.

---

## 9. Eine RDP-Datei auf Ubuntu signieren

Beispiel:

```
cp /pfad/zur/original.rdp /opt/rdp-ca/out/test.rdp
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--48"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class=""><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--49"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>Signieren:

```
rdpsign /opt/rdp-ca/out/test.rdp /opt/rdp-ca/out/test-signed.rdp /opt/rdp-ca/certs/RDP-Secure-Access-Signer.cer -k /opt/rdp-ca/private/rdp-secure-access-signer.key
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--50"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class=""><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--51"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>Danach gibst du dem Benutzer nur noch:

```
test-signed.rdp
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--52"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--53"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>Nicht mehr die unsignierte Datei.

---

## 10. Wichtig: Datei nach dem Signieren nicht mehr verändern

Nach dem Signieren darfst du die `.rdp`-Datei nicht mehr ändern. Auch kleine Änderungen wie Zielhost, Username, Gateway, Drucker-Redirect oder Clipboard-Redirect machen die Signatur ungültig.

Ablauf also immer:

```
1. .rdp vollständig erzeugen
2. .rdp signieren
3. signierte .rdp ausliefern
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--55"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--56"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>---

## 11. Dateien, die du den Windows-Usern bereitstellst

Minimal:

```
RDP-Secure-Access-Root-CA.cer
RDP-Secure-Access-Client-Trust.reg
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--58"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--59"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>Optional zusätzlich:

```
RDP-Secure-Access-Signer.cer
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--60"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--61"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>Die privaten Keys bleiben ausschließlich auf dem Server:

```
/opt/rdp-ca/private/rdp-secure-access-root-ca.key
/opt/rdp-ca/private/rdp-secure-access-signer.key
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--62"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--63"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>Diese Dateien niemals an Kunden geben.

---

## 12. Auf einem Windows-Client installieren

```powershell
certutil -addstore -f Root "RDP-Secure-Access-Root-CA.cer"
certutil -addstore -f TrustedPublisher "RDP-Secure-Access-Signer.cer"
reg import "RDP-Secure-Access-Trust.reg"
```

## 13. Test auf einem Windows-Client

Nach Import von Zertifikat und `.reg`:

```
gpupdate /force
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--65"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class=""><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--66"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>Dann `mstsc.exe` vollständig schließen und die signierte `.rdp` öffnen.

Wenn alles passt, sollte als Herausgeber erscheinen:

```
RDP Secure Access
```

<div class="relative w-full mt-4 mb-1" id="bkmrk--67"><div class=""><div class="relative"><div class="h-full min-h-0 min-w-0"><div class="h-full min-h-0 min-w-0"><div class="border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl"><div class="h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback"><div class="relative"><div class="pe-11 pt-3"><div class="relative z-0 flex max-w-full"><div class="q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr" dir="ltr" id="bkmrk--68"><div class="cm-scroller">  
</div></div></div></div></div></div></div></div></div><div class=""><div class="">  
</div></div></div></div></div>Und die wiederkehrenden Warnungen für die signierte `.rdp`-Datei sollten verschwinden beziehungsweise die in der `.rdp` gesetzten Umleitungen wie Zwischenablage und Drucker sollten wieder greifen. Microsofts offizielles `rdpsign.exe` überschreibt beim Signieren die Eingabedatei; das Linux-Tool erzeugt stattdessen eine separate Ausgabedatei.