{"copy":"M\u00e1sol\u00e1s","expand":"R\u00e9szletek megjelen\u00edt\u00e9se","collapse":"Bez\u00e1r\u00e1s","copy_success":"M\u00e1solva!","copy_error":"Sikertelen m\u00e1sol\u00e1s!"}

Kód aláírása a Google Cloud KMS segítségével

A Google Cloud KMS szolgáltatásával FIPS 140-2 Level 3 tanúsítvánnyal rendelkező felhőalapú HSM-et kap. Biztonságosan, gyorsan és bárhonnan aláírhatja a kódot. Az aláírások számához kötött költségek ráadásul nagyon kedvezőek. A Cloud KMS támogatja az aláírást a Microsoft Cryptography API: Next Generation (CNG) segítségével.

A kód beállításához és aláírásához a következő lépéseket kell végrehajtani, amelyeket sorban végigvesszük:

  • Telepítse a CNG providert
  • Hozzon létre Key Ringet és privát kulcsot
  • Hozzon létre CSR-t és szerezzen tanúsítványt
  • Írja alá az szoftverkomponensét

Töltse le a CNG providert és a szükséges csomagokat

A Google közzétette a CNG providerét a saját GitHub-tárolójában. Ezeket a fájlokat a mellékelt .msi telepítő segítségével telepítheti a Windows rendszerébe. Ez a program YAML-fájl formájú konfigurációt igényel, amelyet az útmutató egyik lépésében talál.

Most lépjen át Linuxra (használhatja a Windows alatti WSL-t is). A privát kulcs és a CSR létrehozását javasoljuk Linux alatt elvégezni; bár a Windows alatti PowerShellbe is telepíthető az OpenSSL, Linux alatt kisebb az esélye a bonyodalmaknak. A hivatalos Google-útmutató is így jár el.

A felhővel való kommunikációhoz a google-cloud-cli csomagban található gcloud alkalmazást fogjuk használni.

Hozzon létre Key Ringet és privát kulcsot a Cloud HSM-ben

A következő lépéseket hajtsa végre Linux alatt. Hozzon létre egy új kulcscsomót (Key Ring) a Cloud Key Management Service (KMS) API-hoz, és hozzon létre benne egy privát kulcsot, amelyet hardveresen véd a Cloud HSM. Válasszon aszimmetrikus RSA algoritmust az aláíráshoz és 3072 bites kulcshosszt, mert a SignTool nem tud EC kulcsokat használni a Google Cloud KMS CNG-vel.

Először jelentkezzen be Linux alatt a Google-fiókjába, és autorizálja a munkamenetet (ez a Windows PowerShellre is vonatkozik): gcloud auth application-default login

Így hozhat létre Key Ringet a privát kulcs elhelyezéséhez: gcloud kms keyrings create KEYRING-NAME \
--location=europe-west3 \
--project=PROJECT-NAME

Ebben a Key Ringben fogjuk elhelyezni a privát kulcsot. A kulcsot szintén a gcloud segédprogrammal generáljuk; a neveket (NAGYBETŰKKEL) töltse ki a valóságnak megfelelően (GCP-projektnév) és az ön által használt elnevezésekkel.

gcloud kms keys create KEY-NAME --keyring=KEYRING-NAME --location=europe-west3 --purpose=asymmetric-signing --protection-level=hsm --default-algorithm=rsa-sign-pkcs1-3072-sha256 --project=PROJECT-NAME

Miután létrehozta a kulcs első verzióját, javasoljuk a Cloud Console részleteinél a Copy resource name (forrásnév másolása) érték kimásolását, mert erre lesz szüksége KEY_ID-ként. Így néz ki: projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/1

Most térjen vissza Windowsra, ahol létre kell hoznia egy config.yaml fájlt a KMS-integráció konfigurációjához. A PowerShellbe írja be a következőt: $yaml = @"
resources:
- crypto_key_version: "projects/PROJECT-NAME/locations/europe-west3/keyRings/KEYRING-NAME/cryptoKeys/KEY-NAME/cryptoKeyVersions/1" "@

$yaml = $yaml -replace "`t"," "

$utf8NoBom = New-Object System.Text.UTF8Encoding($false)
[System.IO.File]::WriteAllText('C:\Windows\KMSCNG\config.yaml', $yaml, $utf8NoBom)

CSR létrehozása

HSM-be természetesen nem lehet privát kulccsal együtt tanúsítványt importálni, ahogy a kulcspárt sem lehet exportálni. A privát kulcsnak és a CSR-nak tehát a HSM-ben kell létrejönnie; a CSR-t ezután nyújtsa be az SSLmarkethez, és a DigiCert aláírja. A kiadott tanúsítvány importálása a következő lépésben történik.

A CSR létrehozását legjobb Linux alatt elvégezni a libengine-pkcs11-openssl, a libkmsp11 és az API használatával. Természetesen szüksége lesz a google-cloud-cli csomagra is.

A CSR létrehozása így néz ki (a pkcs11:object= után töltse ki a kulcs nevét (CryptoKey) a GCP szerint): openssl req -new \
-subj "/C=CZ/O=ZONER /CN=ZONER" \
-sha256 -engine pkcs11 -keyform engine \
-key "pkcs11:object=KEY_NAME;type=private" \
-reqexts v3_req -config <(cat /etc/ssl/openssl.cnf; printf "\n[v3_req]\nextendedKeyUsage=codeSigning\n") \
-out cs-request.csr

A DigiCert számára készült kérelem ezután a cs-request.csr fájlban lesz abban a mappában, ahol éppen dolgozik. Küldje el nekünk ezt a CSR-t.

Tanúsítvány beszerzése

Az elkészített CSR-t hagyja aláíratni a DigiCerttel, és visszakap egy új Code Signing tanúsítványt. Ezt nem kell a Google Cloud Console-ba feltöltenie; elegendő, hogy a privát kulcs ott található. A tanúsítvánnyal Windows alatt, helyben fogunk dolgozni — mentse el a lemezen fájlként.

Írja alá az szoftverkomponenseit

Folytassuk Windows alatt. A Google 2024-től hivatalos Cloud KMS CNG Providert adott ki, amely Windowsban a Crypto Service Provider (CSP) / Key Storage Provider (KSP) szerepkörben Google Cloud KMS Provider néven regisztrálódik. Ennek köszönhetően a SignTool a felhőben tárolt kulcsokat is használhatja, nem csak a helyi tokent.

Az aláíráshoz a Windows SDK SignTool-ját és az eszköz x64-es változatát használjuk; javasoljuk a legújabb verziót. Győződjön meg róla, hogy a megfelelő paramétereket adja meg (a példa alatti magyarázat szerint).

Példa az aláírásra SignTool és PowerShell segítségével: & $SignTool sign `
/v /debug `
/fd sha256 /td sha256 `
/tr http://timestamp.digicert.com `
/f "PATH_TO_CERT" `
/csp "Google Cloud KMS Provider" `
/kc "projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/1" `
"PATH_TO_FILE_TO_SIGN"

Magyarázat:

  • /f PATH_TO_CERT a Code Signing tanúsítványt tartalmazó fájl (a nyilvános rész). Ha HSM-re kérte a kiállítást, tőlünk így, egybeállítva kapja meg.
  • /csp a használandó CNG providert adja meg, mivel Windows alatt több is lehet. A Google Cloud KMS Provider ugyanúgy regisztrált, mint például a „Microsoft Software Key Storage Provider”.
  • /kc (Key Container) a konkrét kulcs és annak verziója (KMS CryptoKeyVersion) — ez felel meg a korábban említett KEY_ID-nek.

Az aláírás során látható lesz, melyik tanúsítványt választotta a SignTool és mi lett az eredmény. Mivel a SignToolnak időnként gondja van a tanúsítvány felhőbeli privát kulcshoz való társításával (CSP/KSP-n keresztül), javasoljuk, hogy a tanúsítvány legyen helyben, fájlban. A szervezet neve vagy az SHA1-hash szerinti választás problémás, és többnyire nem működik; a fájlként megadott tanúsítvány viszont működött.

The following certificate was selected:
Issued to: ZONER a.s.
Issued by: DigiCert Trusted G4 Code Signing RSA4096 SHA384 2021 CA1
Expires: Wed Nov 12 01:59:59 2025
SHA1 hash: F9BC96AC1764AD9F2072780FFB64940538A3B292

The following additional certificates will be attached:
Issued to: DigiCert Trusted G4 Code Signing RSA4096 SHA384 2021 CA1
Issued by: DigiCert Trusted Root G4
Expires: Tue Apr 29 01:59:59 2036
SHA1 hash: 7B0F360B775F76C94A12CA48445AA2D2A875701C

Done Adding Additional Store
Successfully signed: C:\Users\jindrich.zechmeister\HelloSign.exe

Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0

Bónusz – aláírás ellenőrzése

Az újonnan létrehozott digitális aláírást a SignTool-lal is ellenőrizhetjük.

PS C:\Users\jindrich.zechmeister> signtool verify /pa c:\Users\jindrich.zechmeister\App.exe
File: c:\Users\jindrich.zechmeister\App.exe
Index Algorithm Timestamp
========================================
0 sha256 RFC3161
Successfully verified: c:\Users\jindrich.zechmeister\App.exe

Az EXE fájl aláírásának ellenőrzése sikeres!

Források:

Hasznos volt Önnek ez a cikk?