release.ps1: secrets in %USERPROFILE%\.msco (AppData is virtualized for packaged apps)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+14
-4
@@ -3,14 +3,14 @@
|
|||||||
# powershell -ExecutionPolicy Bypass -File release.ps1 -Product mod -File bin\Release\MSCO.dll
|
# powershell -ExecutionPolicy Bypass -File release.ps1 -Product mod -File bin\Release\MSCO.dll
|
||||||
#
|
#
|
||||||
# Braucht den Release-Token des Keymasters (RELEASE_TOKEN in dessen .env), lokal verschlüsselt in
|
# Braucht den Release-Token des Keymasters (RELEASE_TOKEN in dessen .env), lokal verschlüsselt in
|
||||||
# %AppData%\MSCO\release-token.dpapi (Windows DPAPI, nur dein Windows-Konto kann ihn lesen - anlegen mit
|
# %USERPROFILE%\.msco\release-token.dpapi (Windows DPAPI, nur dein Windows-Konto kann ihn lesen - anlegen mit
|
||||||
# "release.ps1 -SaveToken"), sonst als Umgebungsvariable MSCO_RELEASE_TOKEN. Ohne Token wird nichts hochgeladen.
|
# "release.ps1 -SaveToken"), sonst als Umgebungsvariable MSCO_RELEASE_TOKEN. Ohne Token wird nichts hochgeladen.
|
||||||
# MSCO_NO_RELEASE=1 schaltet das Hochladen ab (Test-Builds).
|
# MSCO_NO_RELEASE=1 schaltet das Hochladen ab (Test-Builds).
|
||||||
#
|
#
|
||||||
# Signatur: jede Datei wird mit dem privaten Release-Schlüssel signiert (RSA-3072, SHA-256) - der Launcher und das Setup
|
# Signatur: jede Datei wird mit dem privaten Release-Schlüssel signiert (RSA-3072, SHA-256) - der Launcher und das Setup
|
||||||
# installieren nur, was zu ihrem eingebauten öffentlichen Schlüssel passt. Selbst wer den Keymaster oder den Token
|
# installieren nur, was zu ihrem eingebauten öffentlichen Schlüssel passt. Selbst wer den Keymaster oder den Token
|
||||||
# übernimmt, kann so keine fremde Datei als MSCO-Update verteilen. Der Schlüssel liegt DPAPI-verschlüsselt in
|
# übernimmt, kann so keine fremde Datei als MSCO-Update verteilen. Der Schlüssel liegt DPAPI-verschlüsselt in
|
||||||
# %AppData%\MSCO\release-signing-key.dpapi (einmal anlegen: "release.ps1 -NewSigningKey"; SICHERN: "-ExportSigningKey").
|
# %USERPROFILE%\.msco\release-signing-key.dpapi (einmal anlegen: "release.ps1 -NewSigningKey"; SICHERN: "-ExportSigningKey").
|
||||||
# Gibt es die Version auf dem Keymaster schon, passiert nichts - also einfach die Version erhöhen und bauen.
|
# Gibt es die Version auf dem Keymaster schon, passiert nichts - also einfach die Version erhöhen und bauen.
|
||||||
param(
|
param(
|
||||||
[ValidateSet("mod", "launcher", "installer")][string]$Product,
|
[ValidateSet("mod", "launcher", "installer")][string]$Product,
|
||||||
@@ -27,7 +27,17 @@ $here = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|||||||
Add-Type -AssemblyName System.Security
|
Add-Type -AssemblyName System.Security
|
||||||
$entropy = [Text.Encoding]::UTF8.GetBytes("MSCO release token v1")
|
$entropy = [Text.Encoding]::UTF8.GetBytes("MSCO release token v1")
|
||||||
$scope = [Security.Cryptography.DataProtectionScope]::CurrentUser
|
$scope = [Security.Cryptography.DataProtectionScope]::CurrentUser
|
||||||
$tokenDpapi = Join-Path $env:APPDATA "MSCO\release-token.dpapi"
|
# Geheimnisse in %USERPROFILE%\.msco - nicht in AppData: das virtualisieren App-Pakete (z.B. die Claude-App), dann sähe
|
||||||
|
# ein normales Terminal die Dateien nicht. Die alte Ablage in AppData wird noch gelesen.
|
||||||
|
$secretDir = Join-Path $env:USERPROFILE ".msco"
|
||||||
|
function Find-Secret([string]$name) {
|
||||||
|
$new = Join-Path $secretDir $name
|
||||||
|
if (Test-Path $new) { return $new }
|
||||||
|
$old = Join-Path $env:APPDATA "MSCO\$name"
|
||||||
|
if (Test-Path $old) { return $old }
|
||||||
|
return $new
|
||||||
|
}
|
||||||
|
$tokenDpapi = Find-Secret "release-token.dpapi"
|
||||||
|
|
||||||
# Token einmal verschlüsselt ablegen: fragt verdeckt danach (oder nimmt MSCO_RELEASE_TOKEN)
|
# Token einmal verschlüsselt ablegen: fragt verdeckt danach (oder nimmt MSCO_RELEASE_TOKEN)
|
||||||
if ($SaveToken) {
|
if ($SaveToken) {
|
||||||
@@ -44,7 +54,7 @@ if ($SaveToken) {
|
|||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
$keyEntropy = [Text.Encoding]::UTF8.GetBytes("MSCO release signing key v1")
|
$keyEntropy = [Text.Encoding]::UTF8.GetBytes("MSCO release signing key v1")
|
||||||
$keyFile = Join-Path $env:APPDATA "MSCO\release-signing-key.dpapi"
|
$keyFile = Find-Secret "release-signing-key.dpapi"
|
||||||
|
|
||||||
# Neues Schlüsselpaar (nur einmal - der öffentliche Schlüssel ist in Launcher und Setup eingebaut)
|
# Neues Schlüsselpaar (nur einmal - der öffentliche Schlüssel ist in Launcher und Setup eingebaut)
|
||||||
if ($NewSigningKey) {
|
if ($NewSigningKey) {
|
||||||
|
|||||||
Reference in New Issue
Block a user